Andreas2014 0 Geschrieben 21. April 2015 Melden Teilen Geschrieben 21. April 2015 (bearbeitet) Hallo SQL-Experten,ich habe eine mysql-Tabelle mit Personendaten, darunter die Geburtsdaten. Nun möchte ich per php eine "Alters"-Tabelle erzeugen, in der nur das Alter der Personen aufgeführt wird, und zwar nur einmal. Das wollte ich mit DISTINCT lösen. Die Altersberechnung funktioniert, aber DISTINCT funktioniert nicht, es werden alle Zeilen doppelt und dreifach ausgelesen. Mein Code sieht so aus: "SELECT DISTINCT TIMESTAMPDIFF(YEAR, geburtsdatum, NOW()) AS alter_jahr FROM Tabelle" Also statt: 15 Jahre17 Jahre20 Jahre21 Jahre30 Jahre32 Jahre kommt das dabei raus: 15 Jahre15 Jahre17 Jahre20 Jahre20 Jahre20 Jahre... usw. ---------------------------------------------- Edit: NOW() kann wohl wegen der sich ständig ändernden Uhrzeit nicht mit DISTINCT funktionieren ;-) Mit CURDATE() funktioniert das ganze jetzt :-) Jetzt ergibt sich aber ein anderes Problem: Es existieren auch verstorbene Personen in der Tabelle. Damit deren Alter nicht bis CURDATE() berechnet wird, sondern bis zum Feld "todesdatum", habe ich eine UNION-Abfrage gemacht, wobei ich einmal nach den noch lebenden und einmal nach den schon verstorbenen suche. Das klappt auch. Aber die Sortierung nicht, es ist ein heilloses Kuddelmuddel. ORDER BY scheint nicht zu funktionieren. Hier ist mein Code: (SELECT DISTINCT TIMESTAMPDIFF(YEAR, geburtsdatum, todesdatum) AS alter_jahr FROM Tabelle WHERE todesdatum NOT LIKE '0000-00-00') UNION (SELECT DISTINCT TIMESTAMPDIFF(YEAR, geburtsdatum, CURDATE()) AS alter_jahr FROM Tabelle WHERE todesdatum LIKE '0000-00-00') Edit: ORDER BY funktioniert, wenn ich bei der UNION-Abfrage die äußeren Klammern weglasse, also folgendermaßen: SELECT DISTINCT TIMESTAMPDIFF(YEAR, geburtsdatum, todesdatum) AS alter_jahr FROM Tabelle WHERE todesdatum NOT LIKE '0000-00-00' UNION SELECT DISTINCT TIMESTAMPDIFF(YEAR, geburtsdatum, CURDATE()) AS alter_jahr FROM Tabelle WHERE todesdatum LIKE '0000-00-00' ORDER BY alter_jahr" Problem damit gelöst :-) Andreas bearbeitet 21. April 2015 von Andreas2014 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.