Jens Holzkämper: MYSQL Subselect mit Werten aus select?

Beitrag lesen

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