#mysql #sql
Вопрос:
Я пытаюсь выполнить два запроса в Sql, но я хочу запустить второй только тогда, когда будет выполнен первый.
вот пример, который поможет понять, что я пытаюсь сделать:
-------------------------------
| id | name | level | passed |
|--------------------|--------|
| 1 |Jose | A | YES |
|--------------------|--------|
| 2 |Jeehan | B | YES |
|--------------------|--------|
| 3 |Sara | D | NO |
|--------------------|--------|
| 4 |Sami | B | YES |
|--------------------|--------|
| 5 |Lucy | C | NO |
|--------------------|--------|
| 6 |Maria | A | YES |
|--------------------|--------|
Теперь я хочу выбрать первых пользователей, которые прошли (прошло=ДА).
Затем запустите второй запрос, чтобы показать всех остальных пользователей.
Я не хочу заказывать их по YES
или NO
потому, что я не хочу, чтобы их заказывали. я хочу, чтобы первый запрос давал мне случайных пользователей, но все они имеют одинаковое значение passed
столбца. а также второе дает мне случайных пользователей с одинаковым значением столбца.
вот что я сделал, но это не работает.
(SELECT * FROM users WHERE passed='yes' ORDER BY RAND()) UNION
(SELECT * FROM users WHERE passed='no' ORDER BY RAND())
Ответ №1:
Просто используйте один order by
:
SELECT u.*
FROM users u
ORDER BY u.passed DESC, RAND();
Это предполагает, что passed
только принимает значения 'yes'
и 'no'
. Если он принимает другие значения, то сначала отфильтруйте:
SELECT u.*
FROM users u
WHERE u.passed IN ('yes', 'no')
ORDER BY u.passed DESC, RAND();