Gegen Bilderklau - Das Original (https://www.gegen-bilderklau.net/index.php)
- Design, Website, Copyright (https://www.gegen-bilderklau.net/board.php?boardid=80)
--- Homepagehilfe (https://www.gegen-bilderklau.net/board.php?boardid=27)
---- Homepagehilfe - Archiv (https://www.gegen-bilderklau.net/board.php?boardid=139)
----- [PHP & MySQL] Group by in select, aber nicht in delete?! (https://www.gegen-bilderklau.net/thread.php?threadid=163325)


Geschrieben von cll am 15.10.2009 um 11:59:

traurig Group by in select, aber nicht in delete?!

Ich habe folgendes SQL-Statement:
SELECT * FROM ZGs GROUP BY zg Having count(zg)=1
(ruft alle zeilen ab, bei denen nur ein user in einer Gruppe (zg) ist)

Nun will ich aber genau diese Einträge löschen! Wenn ich anstatt "select *" ein delete schreibe wird aber das group by nicht mehr akzeptiert -> ich kann nicht mehr zählen wieviele user es pro Gruppe gibt

Wie umgehe ich das am Besten?



Geschrieben von Ayana am 15.10.2009 um 14:07:

 

Wird GROUP BY nicht eigentlich zum Sortieren von Werten mit arithmetischen Operatoren verwendet? Ich haette das ganze wohl mit WHERE umgesetzt..



Geschrieben von 1Sm!le am 15.10.2009 um 14:55:

 

GROUP BY wird zum Gruppieren nach Zeilen genutzt. Das ist eine völlig legitime Variante.

Da aber GROUP BY und HAVING von MySQL erst sehr spät in der internen Abarbeitung ausgeführt werden - nachdem schon alle Ergebnisse beisammen sind - empfehle ich für diese Art Abfrage auch ein WHERE, das ist MySQL-intern sinnvoller. Es bedeutet nämlich: Hole (SELECT) alle Zeilen, die die Bedingung WHERE erfülllen.
Bei dir läuft hingegeben ab: Beim SELECT wird erst selektiert und die Ergebniszeilen dann gruppiert und nach der HAVING-Bedingung noch mal aussortiert.

DELETE akzeptiert aber keine Gruppierung, das macht auch keinen Sinn: Beim DELETE müsste er erst alle löschen und dann gruppieren - das geht inhaltlich nicht. Deshalb: Wechsle auf WHERE-Bedingung.



Geschrieben von cll am 15.10.2009 um 16:13:

 

aber wie kann ich im WHERE ausdrücken dass ich alle möchte bei denen der Wert in "zg" einmalig ist?



Geschrieben von cll am 17.10.2009 um 11:28:

 

jetzt weiß ich zumindest den Anfang der Abfrage:
SELECT * FROM ZGs USING ZGs z, ZGs v WHERE ...
aber dann weiß ich schon wieder nicht so wirklich weiter.

Ich denke jetzt mal das ist wie ein join, also
WHERE z.zg=v.zg AND z.user!=v.user
kombiniert alle mit gleicher Spalte "zg" miteinander, bei denen die Spalte "user" unterschiedlich ist.
Weiß jemand ob meine Annahme stimmt dass er mit "AND v.user IS NULL" dann nur die Zeilen auswählt, in denen kein Partner gefunden wurde?

also komplett:
SELECT * FROM ZGs USING ZGs z, ZGs v WHERE z.zg=v.zg AND z.user!=v.user AND v.user IS NULL

wenn nicht, helft mir bitte! LG


Forensoftware: Burning Board, entwickelt von WoltLab GmbH