Order By list

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
Andreas Fromm [ Mi, 05 Dezember 2007 13:50 ] [ ID #1886184 ]

Re: Order By list

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.
Harald Stowasser [ Mi, 05 Dezember 2007 14:05 ] [ ID #1886185 ]

Re: Order By list

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
Andreas Fromm [ Mi, 05 Dezember 2007 16:38 ] [ ID #1886192 ]

Re: Order By list

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
B.Steinbrink [ Mi, 05 Dezember 2007 16:51 ] [ ID #1886193 ]
Datenbanken » de.comp.datenbanken.mysql » Order By list

Vorheriges Thema: max_connect_errors auslesen
Nächstes Thema: count Ausgabe bei vergleichen zweier Tabellen auch Ausgabe wenn keine Zuweisung vorhanden ist