Выборка из базы данных, получить необходимый порядок

WHERE ID IN(5,10,33,1)

Когда выполняем подобную выборку,на выходе получаем записи в том порядке в котором они расположены в таблице.

Как выполнить так, чтобы на выходе получить записи именно в том порядке в котором указаны в IN() ??


Ответы (1 шт):

Автор решения: Oopss

Нужно описать порядок вывода, например во временной таблице:

#Основная таблица
CREATE TABLE users (
    id INT PRIMARY KEY,
    user text
);

#Таблица определяющая порядок вывода
CREATE TEMPORARY TABLE order_table (
    order_id INT PRIMARY KEY,
    user_id INT
);

# ВВод основной таблицы
INSERT INTO users (id, user) values
(1,  'Максим'),
(2,  'Михаил'),
(3,  'Александр'),
(4,  'Дмитрий'),
(5,  'Денис'),
(6,  'Илья'),
(7,  'Андрей'),
(8,  'Даниил'),
(9,  'Артём'),
(10, 'Иван'),
(11, 'Алексей'),
(12, 'Никита'),
(13, 'Павел'),
(14, 'Евгений'),
(15, 'Антон'),
(16, 'Лев'),
(17, 'Эльдар'),
(18, 'Григорий'),
(19, 'Владимир'),
(20, 'Руслан');

#Заполнить таблицу соответсвия
INSERT INTO order_table (order_id, user_id) VALUES
(1, 8),
(2, 13),
(3, 5),
(4, 10),
(5, 31);


SELECT 'Через левое соединение' as '1';
SELECT t1.user_id, ifnull(t2.user, 'Не определен' ) users
FROM order_table t1 left join users t2 ON t1.user_id = t2.id;

SELECT 'Через внутреннеe соединение' as '2';
SELECT t1.user_id, t2.user users
FROM order_table t1 inner join users t2 ON t1.user_id = t2.id;

+--------------------------------------------+
| 1                                          |
+--------------------------------------------+
| Через левое соединение                     |
+--------------------------------------------+
+---------+-------------------------+
| user_id | users                   |
+---------+-------------------------+
|       8 | Даниил                  |
|      13 | Павел                   |
|       5 | Денис                   |
|      10 | Иван                    |
|      31 | Не определен            |
+---------+-------------------------+
+-----------------------------------------------------+
| 2                                                   |
+-----------------------------------------------------+
| Через внутреннеe соединение                         |
+-----------------------------------------------------+
+---------+--------------+
| user_id | users        |
+---------+--------------+
|       8 | Даниил       |
|      13 | Павел        |
|       5 | Денис        |
|      10 | Иван         |
+---------+--------------+
  • Используйте INNER JOIN, если:

Вам нужны только строки, которые имеют соответствия в обеих таблицах. Вы хотите оптимизировать производительность запроса.

  • Используйте LEFT JOIN, если:

Вам нужны все строки из левой таблицы, даже если нет соответствий в правой таблице. Вы хотите сохранить информацию из левой таблицы, даже если нет соответствий в правой таблице.

https://onecompiler.com/mysql/42y9jkcmw

→ Ссылка