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