Заказ по ПОЛЕ вместе с подзапросом? - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу упорядочить результаты запроса по заданным c значениям.

Похоже, я могу использовать это:

SELECT
    column
FROM
    table
ORDER BY
    IF(
        FIELD(
            id,
            3,1,2
        ) = 0,
        1,
        0
    ) ASC,
    FIELD(
        id,
        3,1,2
    )

Моя проблема в том, что 3,1,2 происходит из другой таблицы колонка. Замена 3,1,2 на (ВЫБРАТЬ столбец из ...) не работает должным образом. Поскольку SELECT возвращает результат как "3,1,2", а не как 3,1,2

, я также могу извлечь 3,1,2 один за другим, но в этом случае я получаю ошибку Subquery returns more than 1 row.

Какое здесь решение?

1 Ответ

0 голосов
/ 03 апреля 2020

Предположим, что оператор, возвращающий значения 3, 1, 2, выглядит примерно так:

SELECT somecolumn FROM sometable ORDER BY someothercolumn

, тогда вы можете использовать GROUP_CONCAT() для создания строки, разделенной запятыми, которая содержит эти значения:

SELECT GROUP_CONCAT(somecolumn ORDER BY someothercolumn) col FROM sometable 

и затем используйте FIND_IN_SET() вместо FIELD():

SELECT t.column
FROM table t
CROSS JOIN (SELECT GROUP_CONCAT(somecolumn col ORDER BY someothercolumn) FROM sometable) s
ORDER BY 
  SUBSTRING_INDEX(t.id, s.col) = 0,
  SUBSTRING_INDEX(t.id, s.col)

Я надеюсь, что я понял logi c, который вы хотите применить для сортировки таблицы с вашим предложением ORDER BY.

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