Gruppieren eines Ergebnisses
Leuchter
- php
Hallo,
ich möchte gerne ein Ergebniss aus einer mysql-Abfrage nach Alter und Titel gruppieren. Hierbei sind Alter und Titel jeweils 1 Feld aus meiner Tabelle.
Beispiel: Jens,18Jahre,Schüler,männlich,lesen,wenigposter
Das ist ein Datnsatz aus meinem Abfrageergebnis.
Nun möchte ich in der Schleife
while ($row_abfrage=mysql_fetch_row($result_abfrage)) { ... }
ein Ergenis produzieren, welches ich später so ausgebe:
<a href=...link>18 Jahre und Wenigposter</a> und bei Klick auf den Link werden dann alle Namen aufgezählt.
Irgendwie raff ich ads aber nicht so ganz :-(
Wer hilft mir mal auf die Sprünge, wie ich das Problem angehen soll?
Grüße
Leuchter
hi,
ich möchte gerne ein Ergebniss aus einer mysql-Abfrage nach Alter und Titel gruppieren.
Hierbei sind Alter und Titel jeweils 1 Feld aus meiner Tabelle.
dann solltest du dies bereits bei der abfrage von der DB machen lassen.
sieh dir im manual den SELECT-zusatz GROUP BY an.
while ($row_abfrage=mysql_fetch_row($result_abfrage)) { ... }
ein Ergenis produzieren, welches ich später so ausgebe:
<a href=...link>18 Jahre und Wenigposter</a> und bei Klick auf den Link werden dann alle Namen aufgezählt.
im link solltest du dann zwei parameter übergeben, einen für das alter 18 und einen für den titel wenigposter.
die zugehörige query lautet dann
SELECT ... ... WHERE alter
= 18 AND titel = 'wenigposter'
(die backticks um alter müssen sein, weil ALTER ein reserviertes wort ist. die spalte anders zu benennen, wäre günstiger.)
gruss,
wahsaga
Hallo,
SELECT ... ... WHERE
alter
= 18 AND titel = 'wenigposter'
(die backticks um alter müssen sein, weil ALTER ein reserviertes wort ist. die spalte anders zu benennen, wäre günstiger.)
Noch guenstiger waere es IMHO, das Geburtsdatum zu speichern.
(Spaltentyp z.B. DATE)
In einem Jahr ist Jens naemlich 19...
SCNR + Gruesse,
Thomas
Hi,
klar, das ist auch nur ein Beispiel, in Wirklichkeit gehts gar nicht ums Alter und den titel :-) Aber leiben wir ruhig mal dabei. Ich finde den group by Zusatz nicht im manual. Habt Ihr mal bitte einen Link da?
Danke auf jeden fall schonmal für Eure Hilfe, klasse, daß ich nicht in die falsche Richtung unterwegs bin :-)
Leuchter
Hallo,
Ich finde den group by Zusatz nicht im manual.
http://www.mysql.com/doc/en/SELECT.html
http://www.mysql.com/doc/en/GROUP-BY-Functions.html
http://www.infos24.de/mysqle/handbuch/3_mysql_count.htm
http://www.dclp-faq.de/q/q-sql-aggregation.html
http://www.google.com/search?q=mysql+"group+by"
Danke auf jeden fall schonmal für Eure Hilfe, klasse, daß ich nicht in die falsche Richtung unterwegs bin :-)
Gruppieren, Sortieren u.s.w. mit PHP waere IMHO die falsche
Richtung, wenn es mit MySQL geht.
Gruesse,
Thomas
Gruppieren, Sortieren u.s.w. mit PHP waere IMHO die falsche Richtung, wenn es mit MySQL geht.
Gruesse,
Thomas
Hi Thomas,
ja, das sehe ich genauso. Danke für die Links, ich bin nun schon ne echte Ecke weiter, aber ich habe wohl mein eigendliches Problem nicht ganz richtig beschrieben.
Denn ich kenne ja weder Namen noch Titel und wenn ich sowohl Namen als auch Titel in meine Abfragequery übernehmen soll, habe ich ein Problem :-(
SELECT ... ... WHERE `alter` = 18 AND titel = 'wenigposter'
ist so leider nicht drin, weil ich beide Bedingungen nicht kenne.
Verstehst Du, was ich meine?
Alter und Titel sind vom User frei wählbar :-)
Hast Du oder ein anderer noch nen guten Tip für mich?
Grüße
Leuchter
ja, das sehe ich genauso. Danke für die Links, ich bin nun schon ne echte Ecke weiter, aber ich habe wohl mein eigendliches Problem nicht ganz richtig beschrieben. Denn ich kenne ja weder Namen noch Titel und wenn ich sowohl Namen als auch Titel in meine Abfragequery übernehmen soll, habe ich ein Problem :-( SELECT ... ... WHERE
alter
= 18 AND titel = 'wenigposter' ist so leider nicht drin, weil ich beide Bedingungen nicht kenne.Verstehst Du, was ich meine?
Alter und Titel sind vom User frei wählbar :-)
Hast Du oder ein anderer noch nen guten Tip für mich?
Hm, oder bringt es etwa sowas in der Art von
select distinct(alter),Titel from tabelle group by Name
?
Grüße
Leuchter
Hi,
hier das Ergebnis:
$querysql="select UserName,Kategorie,PostID from tabelle where Test=1 group by UserName,Kategorie";
Ich kapiers zwar nicht so ganz 100%ig, aber das Ergebinis (selber aus den Links zusammengesucht) bringt das richtige Ergebnis.
Es sollen alle (frei wählbaren) Kategorien nach Username und Kategoriename sortiert werden, aber wenn ein User z.B. 4 Postings unter demselben Kategorienamen postet, soll trotzdem nur 1 mal gezählt werden.
Das klappt. Kann mir einer sagen, warum genau?
Grüße
Leuchter
Hallo,
Denn ich kenne ja weder Namen noch Titel und wenn ich sowohl Namen als auch Titel in meine Abfragequery übernehmen soll, habe ich ein Problem :-(
SELECT ... ... WHEREalter
= 18 AND titel = 'wenigposter'
ist so leider nicht drin, weil ich beide Bedingungen nicht kenne.
Alter und Titel sind vom User frei wählbar :-)
Bitte werde ganz konkret.
Sag, was Du fuer Felder hast, wie sie heissen, welchen Typ sie haben.
Wie ich schon sagte, waere z.B. "Alter" IMHO kein schlaues Feld,
weil "Jahrgang" bzw. "Geburtsdatum" besser geeignet waere.
Wenn Du nach Dingen sortieren lassen willst, dann sind
voellig freie String-Felder (VARCHAR u.s.w.) IMHO weniger
geeignet; besser waere z.B. ENUM, also eine vorgegebene
Anzahl Moeglichkeiten.
Wenn es dann um die Abfrage geht, also um den Weg
HTML-Formular => SQL-Query, solltest Du besondere
Vorsicht walten lassen, damit Dir keine boesen Jungs
irgendwelche Streiche spielen. Stichwort "SQL Injection".
Lies dazu insbesondere den Abschnitt "Sicherheit" der
dclp-FAQ:
http://www.dclp-faq.de/ch/ch-security.html
und such mal hier im </archiv/>, z.B. mit den
Begriffen tom, bitworks, mysql_escape_string ;-)
Gruesse,
Thomas