(Mysql) Как пометить разные ГДЕ ИЛИ строки? - PullRequest
1 голос
/ 24 июня 2010

Например, я запросил:

WHERE (friend_id=? OR client_id=?)

Как узнать, какая строка соответствует условию friend_id, а какая удовлетворяет условию client_id?

Можно ли пометить / пометить строки в зависимости от встречисостояние как-то?

Спасибо.

Ответы [ 6 ]

2 голосов
/ 24 июня 2010
SELECT friend_id=? FROM yourtable WHERE (friend_id=? OR client_id=?);

Вы получите истинное значение, если совпадет предложение Friend_id: Или даже:

SELECT friend_id=?, client_id=? FROM yourtable WHERE (friend_id=? OR client_id=?);

Чтобы получить оба совпаденияТаким образом, вы можете увидеть, если один или оба совпадают.

1 голос
/ 24 июня 2010

Использовать оператор CASE

Если вы знаете, какая строка была поражена, потому что при любом условии вы, конечно, можете добавить эти данные в столбцы результатов, используя операторы case. Единственным недостатком является то, что ваши переменные в вашем подготовленном утверждении (если это то, что у вас здесь есть) будут удвоены.

0 голосов
/ 24 июня 2010

Вы можете добавить флаги к запросу:

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=?)
0 голосов
/ 24 июня 2010

Вы можете использовать IF (), но тогда вам нужно связать один из идентификаторов дважды:

SELECT IF(friend_id=?, 'friend', 'client') AS type
FROM table
WHERE (friend_id=? OR client_id=?)
0 голосов
/ 24 июня 2010
SELECT *,
       'Friend' AS Source
  FROM TABLE
 WHERE friend_id = ?
UNION
SELECT *,
       'Client' AS Source
  FROM TABLE
 WHERE client_id = ?

Но у вас возникнет проблема, если ваша запись будет и другом, и клиентом.Что вы хотите, чтобы произошло в этом случае?

0 голосов
/ 24 июня 2010

Вы можете использовать UNION.

Например:

SELECT name, 1

FROM friends

WHERE friend_id=?

UNION

SELECT name, 0

FROM friends

WHERE client_id=?

Затем при получении данных вы можете проверить этот флаг

...