Таблица "Серверы":условия MySQL между двумя таблицами
+----+----------------+
| id | disabled_until |
+----+----------------+
| 1 | 0 | // disabled_until is an epoch timestamp
| 2 | | // (irrelevant)
| 3 | 1468969442 |
+----+----------------+
стол "server_disables":
+----+-----------+-------+----------------+
| id | server_id | tld | disabled_until |
+----+-----------+-------+----------------+
| 1 | 1 | .com | 0 |
| 2 | 1 | .org | 1468969900 |
| 2 | 3 | .com | 1468969900 |
+----+-----------+-------+----------------+
Я пытаюсь сделать запрос, который выбирает строки из серверов где:
- Имеются 0 строки в server_disables где server_disables.server_id = servers.id или
- Там в 1+ строк в server_disables где server_disables.server_id = servers.id и server_disables.disabled_until меньше определенного времени (скажем, х)
Я считаю, что я создал запрос, который может выполнить # 2, но не # 1. Я не знаю, где продолжить или как добавить случай, когда в server_disables имеется 0 соответствующих строк. Вы можете увидеть мою попытку в OR d.disabled_until IS NULL
, но это не работает.
Запрос:
SELECT s.* FROM servers s
INNER JOIN server_disables d ON (d.server_id = s.id AND d.tld = '.com')
WHERE (s.disabled_until < 1468984373)
AND (d.disabled_until < 1468984373 OR d.disabled_until IS NULL)
ORDER BY RAND() LIMIT 5
Мой вопрос заключается в том, чтобы сделать мой запрос также показывает строку из таблицы «серверов», где есть 0 строк слиты с INNER JOIN
.
Используйте 'ЛЕВЫЙ JOIN'. – Blank