Jump to content

Andreas2014

Members
  • Gesamte Inhalte

    7
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Andreas2014

  1. 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 Jahre
    17 Jahre
    20 Jahre
    21 Jahre
    30 Jahre
    32 Jahre
     
    kommt das dabei raus:
     
    15 Jahre
    15 Jahre
    17 Jahre
    20 Jahre
    20 Jahre
    20 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

  2. Wahnsinn, super, danke, das funktioniert  :D

     

    Jetzt habe ich aber doch noch ein Problem. Ich habe nicht bedacht, dass manche Personen zwei Vornamen haben. Bei diesen Einträgen funktioniert das natürlich doch nicht mehr. Hast du auf die Schnelle auch dafür eine Lösung?

  3. Hallo Pathomorph, danke für deine schnelle Antwort!

     

    Ich habe deinen Code original so eingefügt, jedoch bekomme ich folgende Fehlermeldung:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given

    Woran könnte es liegen?

     

    Gruß, Andreas

  4. Hallo SQL-Experten,

    als blutiger Neuling brauche ich dringend eure Hilfe ;-)

     

    Ich habe eine Tabelle mit einer Personennamen-Spalte und möchte die Namen mit WHERE auslesen, und zwar über den Anfangsbuchstaben des Nachnamens. Dummerweise habe ich Vor- und Nachnamen in einem Feld angelegt. Trotzdem habe ich es geschafft, den Nachnamen folgendermaßen anzusprechen (in diesem Fall nach Buchstabe H):

    ... WHERE name LIKE '% H%' ORDER BY name ASC

    Jetzt möchte ich aber die Suchergebnisse sortieren lassen, und zwar innerhalb der Nachnamen (also Harrer, Heinrich, Hoffmann, Hubert). Dies klappt mit obigem Beispiel leider nicht, da Vor- und Zuname ein Feld sind und er eben vorne mit dem Vornamen zu sortieren beginnt.

     

    Gibt es eine Möglichkeit, dies zu bewerkstelligen, vielleicht mit regulären Ausdrücken oder so?

     

    Vielen Dank für eure Hilfe im voraus :-)

     

    Gruß, Andreas

×
×
  • Neu erstellen...