【问题标题】:Where Like Dependent on User ID取决于用户 ID
【发布时间】:2026-01-10 13:10:01
【问题描述】:

我一直在使用一个查询来检查用户从搜索字段中输入的内容并取回相关数据。此查询使用多个赞来检查各个字段(名称、参考、订单 ID 等)。

我注意到查询忽略了它检查 用户 ID 的位置以仅显示该用户的记录。而是带回所有用户的记录。这是当前查询:

SELECT  ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME 
FROM ORDERS 
WHERE USER_ID = '$userID' AND ORDER_ID LIKE '%$SearchData%' 
    OR ORDER_RECNAME LIKE '%$SearchData%' OR ORDER_REF LIKE '%$SearchData%' 
    OR ORDER_POSTCODE LIKE '%$SearchData%' 
GROUP BY ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME

我有什么地方出错了吗?它正确使用了Likes,但没有正确使用WHERE USER_ID 部分。

【问题讨论】:

  • 试试这个:SELECT ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME FROM ORDERS WHERE USER_ID = '$userID' AND (ORDER_ID LIKE '%$SearchData%' OR ORDER_RECNAME LIKE '%$SearchData%' OR ORDER_REF LIKE '%$SearchData%' OR ORDER_POSTCODE LIKE '%$SearchData%' ) 按 ORDER_ID、ORDER_DATE、ORDER_TIME、ORDER_REF、ORDER_RECNAME 分组
  • @FlorinSecal 谢谢!现在工作完美:)

标签: php mysql sql where sql-like


【解决方案1】:

您在没有括号的 where 条件中混合了 andor 运算符,这会导致问题。封装or连接的like操作符,对所有操作符应用user_id限制。请记住,and 运算符的优先级高于 or

USER_ID = '$userID' AND (ORDER_ID LIKE '%$SearchData%' 
OR ORDER_RECNAME LIKE '%$SearchData%' OR ORDER_REF LIKE '%$SearchData%' 
OR ORDER_POSTCODE LIKE '%$SearchData%') 

【讨论】: