WHERE子句放在哪里限制搜索引擎

时间:2013-08-12 13:17:53

标签: php mysql where

我遇到限制搜索引擎的问题,只显示与用户相关的数据($ comp_id)。我知道WHERE子句需要在某处,我只是不知道在哪里。请帮忙!感谢。

"SELECT * FROM products " .
"WHERE item_id LIKE '%".$keywords[$i]."%'".
" OR item_name LIKE '%".$keywords[$i]."%'" .
" OR class LIKE '%".$keywords[$i]."%'" .
" ORDER BY item_name";

它是否在第一个WHERE子句之后?

4 个答案:

答案 0 :(得分:1)

你想要的东西是:

SELECT 
  *
FROM
  products 
WHERE
  (
  item_id LIKE '%".$keywords[$i]."%' OR
  item_name LIKE '%".$keywords[$i]."%' OR
  class LIKE '%".$keywords[$i]."%'
  )
  AND
  user = $comp_id
ORDER BY
  item_name

搜索关键字在括号中,因此它会在括号中找到任何/所有内容,因为每个条件都是OR。 括号外的AND将它与OR查询分开。

所以括号中的任何内容匹配,即如果A = b OR c = d或其他=其他=那么AND将明确表示括号中匹配的任何内容为TRUE且用户名是特定的= TRUE。

答案 1 :(得分:0)

您在语句中已经有一个WHERE子句,但是您缺少一个将结果限制为特定用户的参数。

由于数据库模式不存在,我们假设表中有一个名为“user_id”的字段表示用户的唯一ID。我们还假设'user_id'是一个整数。在这种情况下,您的SQL语句将如下所示:

"SELECT * FROM products " .
"WHERE item_id LIKE '%".$keywords[$i]."%'".
" OR item_name LIKE '%".$keywords[$i]."%'" .
" OR class LIKE '%".$keywords[$i]."%'" .
" AND user_id = " . $comp_id .
" ORDER BY item_name";

在该语句中,我们有一个任何匹配所需的AND子句,并且说'user_id'必须与$comp_id变量中的值匹配。

仅当products表包含与用户相关的条目并且存在一个字段供您查询时,此方法才有效。如果表格结构更复杂,则无法使用,您可能需要修改问题以包含更多数据。

答案 2 :(得分:0)

看起来你已经得到了詹姆斯的答案。看起来您正在从用户输入中获取关键字,请确保转义您的查询,否则您将打开自己的SQL注入世界(http://www.php.net/manual/en/mysqli.real-escape-string.php)。

答案 3 :(得分:0)

由于和/或运算符按外观组的顺序评估OR子句

"SELECT * FROM products " .
"WHERE user_id = '". $comp_id."' ".
" AND (item_id LIKE '%".$keywords[$i]."%'".
" OR item_name LIKE '%".$keywords[$i]."%'".
" OR class LIKE '%".$keywords[$i]."%')".
" ORDER BY item_name";