Order By list

Order By list

am 05.12.2007 13:50:48 von Andreas Fromm

SELECT name,img,id FROM groups WHERE id IN (3,1,2,4)

gibt es eine Möglichkeit die Ergebnisse nach der Liste zu sortieren?
Also sie sollten in der Reihenfgolge 3,1,2,4 rauskommen.

Gruß Andreas

Re: Order By list

am 05.12.2007 14:05:34 von Harald Stowasser

Andreas Fromm schrieb:
> SELECT name,img,id FROM groups WHERE id IN (3,1,2,4)
>
> gibt es eine Möglichkeit die Ergebnisse nach der Liste zu sortieren?
> Also sie sollten in der Reihenfgolge 3,1,2,4 rauskommen.

# erstmal ne Hilfstabelle:
CREATE TEMPORARY TABLE foo(id INT,sort INT) ENGINE = MEMORY;
# Dann die Suchdaten rein:
INSERT INTO foo (id,sort)
VALUES (3,1),(1,2),(2,3),(4,3);
#ab hier kann man lustige sachen machen:
SELECT name,img,id
FROM foo
INNER JOIN groups USING(id)
ORDER BY sort;
# So und zum Schluss schön aufräumen:
DROP TABLE too;

so hab ich das mal vor 2,5 Jahren gelösst.

Re: Order By list

am 05.12.2007 16:38:32 von Andreas Fromm

Harald Stowasser schrieb:
> Andreas Fromm schrieb:
>> SELECT name,img,id FROM groups WHERE id IN (3,1,2,4)
>>
>> gibt es eine Möglichkeit die Ergebnisse nach der Liste zu sortieren?
>> Also sie sollten in der Reihenfgolge 3,1,2,4 rauskommen.
>
> # erstmal ne Hilfstabelle:
> CREATE TEMPORARY TABLE foo(id INT,sort INT) ENGINE = MEMORY;
> # Dann die Suchdaten rein:
> INSERT INTO foo (id,sort)
> VALUES (3,1),(1,2),(2,3),(4,3);
> #ab hier kann man lustige sachen machen:
> SELECT name,img,id
> FROM foo
> INNER JOIN groups USING(id)
> ORDER BY sort;
> # So und zum Schluss schön aufräumen:
> DROP TABLE too;
>
> so hab ich das mal vor 2,5 Jahren gelösst.

oha,
in meinem Fall lohnt sich das dann glaub ich nicht für 2,3 rows. Aber
sieht interessant aus,
danke

Re: Order By list

am 05.12.2007 16:51:16 von B.Steinbrink

On Wed, 05 Dec 2007 16:38:32 +0100, Andreas Fromm wrote:

> Harald Stowasser schrieb:
>> Andreas Fromm schrieb:
>>> SELECT name,img,id FROM groups WHERE id IN (3,1,2,4)
>>>
>>> gibt es eine Möglichkeit die Ergebnisse nach der Liste zu sortieren?
>>> Also sie sollten in der Reihenfgolge 3,1,2,4 rauskommen.
>>
>> # erstmal ne Hilfstabelle:
>> CREATE TEMPORARY TABLE foo(id INT,sort INT) ENGINE = MEMORY;
>> # Dann die Suchdaten rein:
>> INSERT INTO foo (id,sort)
>> VALUES (3,1),(1,2),(2,3),(4,3);
>> #ab hier kann man lustige sachen machen:
>> SELECT name,img,id
>> FROM foo
>> INNER JOIN groups USING(id)
>> ORDER BY sort;
>> # So und zum Schluss schön aufräumen:
>> DROP TABLE too;
>>
>> so hab ich das mal vor 2,5 Jahren gelösst.
>
> oha,
> in meinem Fall lohnt sich das dann glaub ich nicht für 2,3 rows. Aber
> sieht interessant aus,

Für adhoc Anfragen, bei denen sich die gewünschte Reihenfolge häufig
ändert bietet sich auch FIND_IN_SET an:

SELECT
name, img, id
FROM
groups
WHERE
id in (3,1,2,4)
ORDER BY
FIND_IN_SET(id, '3,1,2,4')

Funktioniert allerdings nicht, wenn die Werte nach denen sortiert wird
Kommata enthalten.

Björn