1

例如我要求:

WHERE (friend_id=? OR client_id=?)

我怎么知道哪一行满足friend_id条件,哪一行满足client_id条件?

是否可以根据会议条件以某种方式标记/标记行?

谢谢。

4

6 回答 6

2
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=?);

获得两场比赛。通过这种方式,您可以查看一个或两个是否匹配。

于 2010-06-24T10:22:35.247 回答
1

使用 CASE 运算符

如果知道由于任何条件而命中了哪一行,您当然可以使用运算符将​​此数据添加到结果列中case。唯一的缺点是您准备好的语句中的变量(如果这是您在这里所拥有的)将加倍。

于 2010-06-24T10:21:18.737 回答
0

您可以使用联合。

例如:

SELECT name, 1

FROM friends

WHERE friend_id=?

UNION

SELECT name, 0

FROM friends

WHERE client_id=?

然后在接收数据时,您可以检查该标志

于 2010-06-24T10:20:51.467 回答
0
SELECT *,
       'Friend' AS Source
  FROM TABLE
 WHERE friend_id = ?
UNION
SELECT *,
       'Client' AS Source
  FROM TABLE
 WHERE client_id = ?

但是,如果您的条目既是朋友又是客户,您就会遇到问题。在这种情况下你想发生什么?

于 2010-06-24T10:21:13.773 回答
0

您可以使用 IF(),但是您必须将其中一个 id 绑定两次:

SELECT IF(friend_id=?, 'friend', 'client') AS type
FROM table
WHERE (friend_id=? OR client_id=?)
于 2010-06-24T10:24:08.307 回答
0

您可以在查询中添加标志:

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=?)
于 2010-06-24T10:24:42.947 回答