2011-08-01 22 views
0

我有几个用户有项目。我需要每个用户都能够搜索他们的物品,而不是看到其他人的物品。该查询仍允许执行者查看dbase中的每个项目。请帮忙!mysql LIKE匹配,但需要按用户名过滤

$ findit是脚本中的一个变量,它是用户正在查找的内容。 $ username是在登录后通过会话cookie设置的。

$result = mysql_query("SELECT * FROM prices WHERE 
      itemnum LIKE '%$findit%' || 
      itemdesc LIKE '%$findit%' AND username = '$username' ORDER BY price"); 
+0

顺便说一句,你应该使用OR来代替||。在SQL中。 – Ariel

+1

AND在大多数语言中具有更高的优先级,包括SQL。编辑:我不清楚。我的意思是相同的“predecence priority/order” – gbn

+1

@gbn否,请参阅下面链接的图表。 (或在这里再次:http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html) – Shi

回答

2

你应该能够组OR:

SELECT * 
FROM prices 
WHERE (itemnum LIKE '%$findit%' 
    OR itemdesc LIKE '%$findit%') 
    AND username = '$username' 
ORDER BY price 

这将使或作为一个单一的状况,以及用户名匹配的另一个,使得所需的用户名进行匹配。

+1

按照承诺的方式工作。谢谢!!! – Brad

0
$result = mysql_query("SELECT * FROM prices WHERE 
     (itemnum LIKE '%$findit%' OR itemdesc LIKE '%$findit%') 
     AND username = '$username' ORDER BY price"); 

注意括号。如果它们不存在,它会匹配任何一种itemnum LIKE ...itemdesc LIKE ... and username = ...

0
$result = mysql_query("SELECT * FROM prices WHERE 
     (itemnum LIKE '%$findit%' || 
     itemdesc LIKE '%$findit%') AND username = '$username' ORDER BY price"); 

括号缺失。 ANDOR有更高的operator precedence