Vinzenz Mai: mySQL: Count über mehrere Spalten

Beitrag lesen

Hallo Maik,

Die sieht sehr gut aus, dummereweise kann ich nur auf mySQL Version 4.0.15 zurückgreifen, es wird also wie erwartet ein Fehler ausgegeben...

Ja, das ist zu erwarten, aber so gut war die gar nicht. (Ich gehöre ins Bett :-( ). So ist es besser:

  
SELECT                         /* Die Zielspalten, klar */  
  count(b.arznei) AS Anzahl,   /* Anzahl                */  
  b.arznei                     /* Häufigkeit            */  
FROM (  
  SELECT a1 AS arznei FROM behandlungen  
  UNION ALL  
  SELECT a2 FROM behandlungen  
  UNION ALL  
  SELECT a3 FROM behandlungen  
) AS b  
GROUP BY b.arznei              /* Gruppierungsfeld       */  
ORDER BY Anzahl DESC           /* Sortierung             */  

Wie gesagt 4.0.15; noch 'ne Idee?

Das, was Dir hier jeder schon gesagt hat: Baue Deine Datenbank um, verwende eine sinnvolle Tabellenstruktur. Eine bessere Lösung gibt es nicht, selbst bei einer Version > 4.1 wäre obiges Statement ein Notbehelf aber keine echte Lösung.

Eine Idee hätte ich, nicht besonders elegant:
 - Erstelle eine temporäre Tabelle mit der einen notwendigen Spalte
 - Kopiere die entsprechenden Datensätze in diese temporäre Tabelle
 - Führe Deine Abfrage auf die temporäre Tabelle aus
 - Lösche die temporäre Tabelle.

Da dürfte die Auswertung in der API wahrscheinlich geringeren Aufwand bedeuten. Bei Dir kommen unzulängliches DB-Design und unzulängliches DBMS zusammen. Ersteres könntest Du eventuell ändern, auf das zweite dürfte Dein Einfluss geringer sein.

Freundliche Grüße

Vinzenz