SQL - выберите столбец с определенным значением в нем и другими случайными значениями - PullRequest
0 голосов
/ 21 января 2019

Позвольте мне сказать, что у меня есть таблица с именем test со следующими данными

+---------+-----------------+
| id      | t_number        |
+---------+-----------------+
|       1 | 864291100247345 |
|       2 | 355488020906457 |
|       3 | 864296100098739 |
|       4 | 864296100098325 |
|       5 | 864296100119956 |

Я хочу написать оператор select, который возвращает 3 строки с двумя случайными значениями и одним обязательным значением из столбца t_number. например, если обязательное значение 864291100247345, вывод должен выглядеть примерно так:

+---------+-----------------+
| id      | t_number        |
+---------+-----------------+
|       1 | 864291100247345 |
|       2 | 355488020906457 |
|       4 | 864296100098325 |

OR

+---------+-----------------+
| id      | t_number        |
+---------+-----------------+
|       1 | 864291100247345 |
|       3 | 864296100098739 |
|       4 | 864296100098325 |

Я пробовал приведенный ниже запрос, но он не дает ожидаемого результата, в том смысле, что он возвращает результат, но без обязательного значения

SELECT * FROM test WHERE t_number = 864291100247345 OR id LIMIT 3;

Как лучше всего это сделать?

Спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Вы можете использовать order by:

SELECT t.*
FROM test 
ORDER BY (t_number = 864291100247345) DESC,
         rand()
LIMIT 3;

Возвращает сначала обязательное число, а затем случайные числа.

MySQL обрабатывает логические значения (результат выражения =) как числа в числовом контексте, с «1» для true и «0» для false. Таким образом, первое выражение в order by сортирует результирующий набор сначала с «истинными» условиями, а затем с другими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...