Определите, завершен ли первый запрос в sql, а затем выполните второй

#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();