0

我在限制搜索引擎仅显示与用户相关的数据时遇到问题($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

4 回答 4

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。

于 2013-08-12T13:35:47.060 回答
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表包含与用户相关的条目并且存在字段供您查询时才有效。如果表结构更复杂,这将不起作用,您可能需要修改您的问题以包含更多数据。

于 2013-08-12T13:34:01.393 回答
0

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

于 2013-08-12T13:37:27.097 回答
0

由于 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";
于 2013-08-12T13:37:44.630 回答