ORDER BY

5 отговора 292 прегледа
#1

ORDER BY

Здравейте.

Въпросът може да е малко странен, но ми е нужно решение, а не можах да се сетя. Как мога да сортирам извлечените редове по определен ред, различен от ORDER BY column_name? Идеята е, че имам следната заявка

SELECT.... WHERE id IN (3,7,2,9,10,4)

Нужен ми е "ORDER BY id" по реда на задаването на id-то във WHERE клаузата, който в общия случай се генерира динамично.

Базата е MySQL 4.1. Благодаря ви предварително!

Редактирано от mr.vain на

Отговор
в отговор на mr.vain #2

Re: ORDER BY

Да можеш

... ORDER BY <израз>

Само трябва да си измислиш израз който да върши работа

С груба сила например:

... ORDER BY CASE id WHEN 3 THEN 1 WHEN 7 THEN 2 WHEN 9 THEN 3 ...


Аз бих го направил с допълнителна временна табличка и JOIN

CREATE TEMPORARTY TABLE sort (sort TINYINT, id INT) ENGINE=HEAP;
INSERT INTO sort VALUES (1,3), (2,7), (3. 9) ...

salle.online.bg/sig

Редактирано от salle на

Отговор
в отговор на salle #3

Re: ORDER BY

Мерси за бързия отговор, аз току що също намерих решение, което ми върши работа:

SELECT...
FIND_IN_SET(id,'3,7,2,9,10,4') AS sortBy
WHERE id IN (3,7,2,9,10,4)
ORDER BY sortBy

Не зная до колко е универсално и правилно, но работи чудесно.

Има три вида хора. Част от проблема, част от решението и част от пейзажа.
Отговор
в отговор на mr.vain #4

Re: ORDER BY

Естествено, че има много варианти.

Твоето FIND_IN_SET() също може да отиде в ORDER BY клаузата за да не ти се връща в резултата:

SELECT...

WHERE id IN (3,7,2,9,10,4)
ORDER BY FIND_IN_SET(id,'3,7,2,9,10,4');

salle.online.bg/sig
Отговор
в отговор на salle #5

Re: ORDER BY

Идеално.
Не бях използвал тази функция досега, но ми свърши чудесна работа.

Благодаря ти за помощта!

Има три вида хора. Част от проблема, част от решението и част от пейзажа.
Отговор
в отговор на mr.vain #6

Re: Ами то и аз ...

Тази функция FIND_IN_SET() я знам само дотолкова доколкото съм я чел в документацията и съм я обяснявал като се наложи.

salle.online.bg/sig
Отговор