例如我要求:
WHERE (friend_id=? OR client_id=?)
我怎么知道哪一行满足friend_id条件,哪一行满足client_id条件?
是否可以根据会议条件以某种方式标记/标记行?
谢谢。
SELECT friend_id=? FROM yourtable WHERE (friend_id=? OR client_id=?);
如果friend_id 子句匹配,您将得到一个true:甚至:
SELECT friend_id=?, client_id=? FROM yourtable WHERE (friend_id=? OR client_id=?);
获得两场比赛。通过这种方式,您可以查看一个或两个是否匹配。
如果知道由于任何条件而命中了哪一行,您当然可以使用运算符将此数据添加到结果列中case
。唯一的缺点是您准备好的语句中的变量(如果这是您在这里所拥有的)将加倍。
您可以使用联合。
例如:
SELECT name, 1
FROM friends
WHERE friend_id=?
UNION
SELECT name, 0
FROM friends
WHERE client_id=?
然后在接收数据时,您可以检查该标志
SELECT *,
'Friend' AS Source
FROM TABLE
WHERE friend_id = ?
UNION
SELECT *,
'Client' AS Source
FROM TABLE
WHERE client_id = ?
但是,如果您的条目既是朋友又是客户,您就会遇到问题。在这种情况下你想发生什么?
您可以使用 IF(),但是您必须将其中一个 id 绑定两次:
SELECT IF(friend_id=?, 'friend', 'client') AS type
FROM table
WHERE (friend_id=? OR client_id=?)
您可以在查询中添加标志:
SELECT *, IF((friend_id=$friend_id), 1, 0) AS friend_matched, IF((client_id=$client_id), 1, 0) AS client_matched FROM table WHERE (friend_id=? OR client_id=?)