我遇到限制搜索引擎的问题,只显示与用户相关的数据($ 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子句之后?
答案 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";