На данный вопрос уже ответили:
MySQL: сортировка выборки в порядке, заданном в операторе IN
1 ответ
Есть такой запрос:
$translit = $DB->select("SELECT * FROM 'p_CatalogItem' WHERE 'ID' IN (17,19,20,18)");
Но MySQL строки с результатами возвращает совсем в другом порядке:
17,18,19,20
т.е. просто по возрастанию. А мне нужно, чтобы было ровно так же, как в запросе.
Это возможно?
Или если запрос выглядит вот так:
$translit = $DB->select("SELECT * FROM p_CatalogItem WHERE ID IN (?a)", $dopColors);
т.е. вместо конкретных цифр переменная, которая эти цифры и содержит.
Ответ
Надо сделать так.
С помощью ORDER BY.
ORDER BY field(field name, array)
$translit = $DB->select("SELECT * FROM 'p_CatalogItem' WHERE 'ID' IN (17,19,20,18)" ORDER BY field(ID, 17,19,20,18));
Вот вариант с переменной. Так выглядит запрос.
$translit = $DB->select("SELECT * FROM p_CatalogItem WHERE ID IN (?a) ORDER BY field(ID, ?a)", $dopColors);
Комментариев нет:
Отправить комментарий