MySQL строка, используемая в ORDER BY FIELD - PullRequest
0 голосов
/ 22 января 2020

У меня есть массив значений, хранящихся в одной ячейке в виде строки, разделенной запятыми, таким образом:

"0,9,10,2,7,3,4,5,6,8,1,11,12"

У меня также есть таблица (table1) со столбцом (order) с этими числами в другой последовательный порядок:

id|order
0 |5
1 |3
2 |4
3 |1
4 |2
etc

Я хочу сделать SELECT строку "order" из одной таблицы (table2) и использовать эти значения в команде ORDER BY FIELD при выборе из table1.

Это должно вернуть строку в следующем порядке: 3,4,1,2,0.

То, что у меня пока есть:

SELECT id
FROM table1
WHERE table1_id = 3746 
ORDER BY FIELD(orderKey, (
  SELECT `order` FROM table2 
  WHERE table2_id = 3746) 
);

Кажется, проблема в что SELECT order FROM table2 возвращается в виде строки, которую ORDER BY FIELD не хочет принимать в качестве входных данных. Это делает SELECT строки, но они не в указанном порядке.

Я пробовал приведение типов, но, возможно, я не сделал это правильно. Я также искал эквивалент функции php explode, но безрезультатно.

MySQL версия 5.6.41

Любая помощь приветствуется.

1 Ответ

1 голос
/ 22 января 2020

Вы можете использовать FIND_IN_SET() в предложении ORDER BY:

select *
from table1
order by find_in_set(`order`, (select `order` from table2 where table2_id = 3746))

Это будет работать, если все значения в столбце order из table1 существуют в строка, возвращаемая подзапросом, как вы упомянули в вопросе:

У меня также есть таблица (table1) со столбцом (порядок) с эти числа в другом последовательном порядке

. Смотрите демо . Результаты:

| id  | order |
| --- | ----- |
| 4   | 2     |
| 1   | 3     |
| 2   | 4     |
| 0   | 5     |
| 3   | 1     |
...