[MySQL 4.0] GROUP BY/SET-Spalten Problem

Alderan

Grünschnabel
Hallo zusammen

ich habe eine SET-Spalte (a,b,c,d,e).
Nun möchte ich (per GROUP BY) das Ergebnis nach dieser Spalte gruppieren, und zwar so, das nur nach den Elementen nicht aber nach den Element-Kombinationen gruppiert wird.
Wenn jemand als Beispiel in a und b ist, soll er dann auch in der a und b Gruppe auftauchen, es soll aber keine ab-Gruppe erscheinen.

Ist dies Überhaupt mit GROUP BY möglich? Wenn ja wie?

Natürlich wäre es mit 6 einzelnen Querys möglich, nur wäre es mit einer einzigen eleganter und würde auch kein Umschreiben des schon vorhanden PHP-Codes bedeuten.

Danke
 
Bei der Struktur und MySQL 4.0 fällt mir keine Lösung in einem Query ein.
Ich würde Dir, auch im Sinne der Normalisierung, empfehlen, eine eigene Tabelle für die Zustände des Sets und eine m:n-Verknüpfungstabelle zu erstellen.
Dann lässt sich mit einem JOIN oder LEFT JOIN, je nach gewünschtem Ergebnis, eine solche Abfrage gestalten.
Ein Beispiel:
Angenommen, Deine Daten stehen in "Tab", die Verknüpfung wird über "Verkn" mit den Fremdschlüsseln "TabId" und "SetElementId" hergestellt und die einzelnen Werte Deines Set stehen in "SetElement":
SQL:
select 
  SetElement.Name,
  count(Tab.TabId) as Anzahl
from Tab
left join Verkn
  on Tab.Id=Verkn.TabId
left join SetElement
  on Verkn.SetElementId=SetElement.Id
group by Verkn.SetElementId
Fehler sind nicht ausgeschlossen, da ich das Query hier im Editor getippt habe.

Gruß hpvw
 
Zuletzt bearbeitet:
Mit MySQL >= 4.1 (Subqueries und Unions) könnte das hier funktionieren:
Code:
SELECT
  `setwerte`.`setwert`,
  COUNT(*)
FROM
  (SELECT 'a' AS `setwert` UNION SELECT 'b' UNION SELECT 'c' UNION SELECT 'd' UNION SELECT 'e') AS `setwerte`
LEFT JOIN
  `tabelle` ON FIND_IN_SET(`setwerte`.`setwert`, `tabelle`.`setfeld`) > 0
GROUP BY
  `setwerte`.`setwert`
Hab's aber nicht selber testen können.

Grüße,
Martin
 
Vielen Dank das ihr euch den kopf drüber zerbrochen habt.

Ich hab bis jetzt noch nie weiter mit Joins gearbeitet, und damit auch null Plan von:)

Ich werd wohl den PHP Code umschreiben und das ganze mit 6 WHEREs machen. Ich seh bei den Joins gar nicht durch, werd es aber demnächst mal mir ner kleinen Testtabelle probieren, man kann immer dazulernen.
Das ganze war für die Auswertung von nem Fragebogen, und mit dem GROUP BY ließen sich sehr elegant Kreuztabellen erstellen, naja zumindest bei ENUM's:))
 
Zurück