zusammenfassen
schnalbi
- datenbank
0 Vinzenz Mai0 schnalbi0 dr.colossos0 schnalbi
0 dr.colossos0 Thilo Fester
habe eine tabelle 'user' mit folgenden feldern:
id, name, geburtsdatum
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 16 YEAR);
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 18 YEAR);
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 54 YEAR);
also ich möchte die anzahl der user die über 16,über 18 und über 54 sind haben.
kann man das irgendwie in eine abfrage bekommen ??
vielen dank
schnalbi
Hallo
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 16 YEAR);
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 18 YEAR);
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 54 YEAR);
kann man das irgendwie in eine abfrage bekommen ??
Ja, ganz einfach mit UNION.
Nahezu jedes mir bekannte Datenbankmanagementsystem (DBMS) - die einzige
Ausnahme ist das wirklich unfähige MySQL 3.x - kennt UNION. Schau also in der
Dokumentation Deines DBMS, das Du uns freundlicherweise verschwiegen hast, danach.
Freundliche Grüße
Vinzenz
Danke für die schnellen antworten.
also ich habe mysql 5.x
wird die abfrage schneller, wenn ich die abfragen durch union verknüpfe ??
Hi,
naja, das eine ist eine Abfrage, das andere sind 3.
Klar, eine grosse dauert laenger als eine kleine, aber eine grosse ist in diesem Fall schneller als eine kleine.
Jeder Teil der neuen Query ist eine Query der alten, der Vorteil ist, dass du nur einmal zum Server musst, anstatt zuvor 3 mal.
-> Ja, ist schneller
vielen dank für die hilfe. werde es dann immer so machen.
mfg
schnalbi
Soweit ich weiß, wird die Abfrage MySQL-intern eh nochmal von einem Optimierungsalgorithmus zerlegt.
Daher sollte eine einzelne Abfrage meist die bessere Wahl sein.
Hey,
ungetestet, da ich kein MYSQL(?) habe.
Sind zwar immernoch 3 queries, aber nur einmal vom Server und zurueck.
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 16 YEAR)
UNION
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 18 YEAR)
UNION
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 54 YEAR)
Ich denke aber, dass bei UEBER18 auch die aus UEBER16 dabei sind?
Ist das gewollt?
Huhu!
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 16 YEAR);
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 18 YEAR);
SELECT count(id) FROM user WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 54 YEAR);
Ich würde das einfach so machen:
SELECT count( id )
FROM user
WHERE geburtsdatum > DATE_SUB(NOW(), INTERVAL 16 YEAR
OR geburtsdatum > DATE_SUB(NOW(), INTERVAL 18 YEAR
OR geburtsdatum > DATE_SUB(NOW(), INTERVAL 54 YEAR
Das zählt allerdings alle zusammen und gibt nicht für die jeweiligen Jahre die einzelnen Anzahlen aus.
~ Thilo