在何处放置Where子句以限制搜索引擎


Where to place WHERE clause to limit search engine

我遇到了限制搜索引擎仅显示与用户相关的数据($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子句之后吗?

您可能想要这样的东西:

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或c=d或其他内容=什么,那么AND将明确表示括号中匹配的内容为TRUE,用户名也是特定内容=TRUE。

语句中已经有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表包含与用户相关的条目,并且有一个字段可供查询时,这才有效。如果表格结构更复杂,这将不起作用,您可能需要修改问题以包含更多数据。

看起来你已经从James那里得到了答案。因为看起来你是从用户输入中提取关键词,所以一定要转义你的查询,否则你会进入SQL注入的世界(http://www.php.net/manual/en/mysqli.real-escape-string.php)。

由于And/Or运算符是按出现组的顺序求值的,因此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";