SELECT * FROM (
SELECT id, user, status FROM data WHERE status = 'idle'
UNION
SELECT * FROM (
SELECT 0 id, IF((SELECT COUNT(id) FROM data WHERE user = 'abc') = 0, 'abc', NULL) user, 'status' status
) tmp
WHERE user= 'abc'
) tmp2 ORDER BY id
SELECT id, user, status FROM data WHERE status = 'idle'
вернет все результаты в таблице, которые соответствуют этому критерию.Это достаточно очевидно.
SELECT 0 id, IF((SELECT COUNT(id) FROM data WHERE user = 'abc') = 0, 'abc', NULL) user, 'status' status
всегда будет возвращать одну строку.Единственная разница будет, если user = 'abc'
или user = NULL
.user
вернет 'abc'
, если в базе данных нет user = 'abc'
.
SELECT * FROM (...) tmp WHERE user= 'abc'
просто фильтрует результаты из вышеприведенного запроса, так что если строка user = NULL
, то она не включаетсяв остальных результатах.
Все это затем упорядочивается в самом внешнем запросе.