Tach,
Das ist auch richtig und passt. Jetzt möchte ich aber nicht jede ID einzeln Abfragen, sondern ich hätte gerne eine Tabelle wo die ganzen Werte stehen. Das habe ich so versucht.
select id_heim as id,
GROUP_CONCAT(if(id_heim=id_heim and tor_h>tor_g,'S',if(id_heim=id_heim and tor_h=tor_g,'U',if(id_heim=id_heim and tor_h<tor_g,'N',''))) SEPARATOR '') as heim_form
from spiel
where id_heim=id_heim
and tor_h is not null
and saison=2012
and id_liga=36
and datum<(SELECT datum FROM spiel where saison=2012 and id_liga=36 and spieltag=32 order by datum limit 1)
group by id_heim order by datum
Punkt 1: id\_heim=id\_heim ist immer wahr (ausser, wenn es null ist), das kannst du also streichen.
Punkt 2: ORDER BY passiert erst nach GROUP BY (afair: FROM, WHERE, GROUP, HAVING, SELECT, ORDER): Du versuchst nach einer Spalte zu sortieren, nach der nicht gruppiert wurde, das kann nicht funktionieren und andere DBMS als MySQL würden das vermutlich als Fehler werten; MySQL nutzt als Datum einen der möglichen Werte zufällig.
> 2435, 'SSUSSNSUNSSNSS' sieht passt die nicht und ist falsch. :(
> 2435, 'USSUNSSNNSSSSS' das sollte dort normal stehen.
Punkt 3: 'SSUSSNSUNSSNSS' und 'USSUNSSNNSSSSS' sind bis auf die Reihenfolge identisch, das liegt daran, dass die Reihenfolge der Ergebnisse innerhalb der Gruppierung zufällig ist, du wirst vermutlich mindestens einen weiteren Subselect brauchen:
~~~sql
SELECT
a.id_heim as id,
GROUP_CONCAT(if(a.tor_h>a.tor_g,'S',if(a.tor_h=a.tor_g,'U',if(a.tor_h<a.tor_g,'N',''))) SEPARATOR '') as heim_form
FROM (
SELECT id_heim,tor_h,tor_g
FROM spiel
WHERE
tor_h is not null
AND saison=2012
AND id_liga=36
AND datum<(
SELECT datum
FROM spiel
WHERE
saison=2012
AND id_liga=36
AND spieltag=32
ORDER BY datum
LIMIT 1
)
ORDER BY datum
) as a
GROUP BY id_heim;
(ungetestet, aber sowas in der Art soltle es sein)
mfg
Woodfighter