ВЫБЕРИТЕ, где с несколькими условиями в одном запросе - PullRequest
0 голосов
/ 27 февраля 2019

Есть две вещи, которые я хочу достичь.

Это моя таблица базы данных под названием "таблица".

id | friend
---|--------
1  | null
2  | 1
3  | 0
4  | 3
5  | 3
6  | null

Есть два запроса SELECT, которые я хочуделать.

$id = 3;
SELECT * FROM table WHERE id = $id; // Not sql injection safe, just an example

Это должно выбрать id строки = 3. Если столбец friend этой строки = 0, то:

SELECT rows WHERE friend = $id.

Если столбец friend этой строки является чем-токроме 0, затем просто верните эту строку, строку 3. Но , поскольку в моей таблице выше показано, что идентификатор строки 3 friend column = 0, это в целом должно вернуть строки: 3, 4, 5.


Кроме того, другой сценарий немного отличается:

$id = 5;
SELECT * FROM table WHERE id = $id;

Если столбец friend этой строки <> (НЕ равен) 0 И НЕ НЕТNULL, затем используйте число friend и:

SELECT * WHERE id = friend from previous table.

. В этом примере будут возвращены строки 3, 4, 5, потому что ID = 5 и friend ID 5 равно 3. Таким образом, мыищите столбцы id AND friend для 3 и мы выбираем их.

Я хочу объединить все это в один запрос MySQL SELECT.Как я могу это сделать?

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 27 февраля 2019

В первом сценарии я не совсем понимаю, почему нулевое значение для friend возвращает 3, 4 и 5. Почему не 2?Я предполагаю, что если значение friend равно нулю, то добавьте строки, в которых вы являетесь другом.

Итак, перед этим первым примером я не могу перенести таблицу с именем "table",поэтому я буду использовать friends в качестве имени таблицы.

SELECT FF.id
FROM friends FF
  INNER JOIN friends FID on FF.friend = FID.id
WHERE FID.friend = 0 AND FID = $id
UNION
SELECT F2.id FROM friends F2 WHERE F2.id = $id AND F2.friend IS NOT NULL

Внутреннее объединение, принимает идентификатор друзей (FID.id) и снова присоединяется к таблице друзей, чтобы получить все записи.с этим значением друга (FF.friend).

Тогда UNION будет включать исходный идентификатор.Обе стороны UNION не вернут результатов, если поле друга равно NULL.

Аналогично для второго сценария используйте заданное значение ($id = 5), найдите значение friend этой записи.и запросите все записи этого друга, а затем объедините его.

SELECT FF.id
FROM friends FF
WHERE FF.friend = (SELECT FIN.friend FROM friends FIN where FIN.id = $id)
UNION
SELECT FIN.friend FROM friends FIN where FIN.id = $id
...