Jump to content

Andreas2014

Members
  • Gesamte Inhalte

    7
  • Registriert seit

  • Letzter Besuch

Fortschritt von Andreas2014

Apprentice

Apprentice (3/14)

  • Erste Antwort
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei
  • 1 Jahre dabei

Neueste Abzeichen

0

Reputation in der Community

  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. Ja, ihr habt natürlich vollkommen recht. @Pathomorph: Habe nun eine neue Spalte "nachname" angelegt und weiter so verfahren, wie du beschrieben hast. Hat alles bestens funktioniert, jetzt läuft die Sortierung perfekt. Vielen Dank :jau:
  3. Das wäre natürlich das optimale ;) Ich werde mir das morgen in Ruhe anschauen, danke noch mal. Gute Nacht.
  4. 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?
  5. Oh, sorry, wie gesagt, ich bin sowas von Neuling :rolleyes: Ich werde mir den Link mal anschauen, hoffentlich komme ich klar. Gruß, Andreas
  6. 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
  7. 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...