Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

SQL-Fachmann gesucht

Seppel / 4 Antworten / Flachansicht Nickles

Hallo SQL-Fachleute.

Ich habe ein Problem bei meiner Suche...

Beschreibung des Problems:

In der Tabelle x gibt es die Felder "benutzername" "geburtstag" "geburtsmonat" "geburtjahr"
Der user kann bei seiner Suche ein von_alter und ein bis_alter angeben.

Das Alter muss aber erst aus den oben genannten Feldern errechnet werden, z.B. (in PHP):

30.8.2000
31.1.1982
alter 18

if ($monat_heute > $geburtsmonat) $alter = $jahr_heute - $geburtsjahr;


30.8.2000
30.8.1982
alter 18

if ($monat_heute == $geburtsmonat)
if ($tag_heute == $geburtstag) $alter = $jahr_heute - $geburtsjahr;

usw.

Die Befehle gehen aber nur, wenn ich schon die Werte aus der Tabelle ausgelesen habe (select * from x)

Meine Frage: wie krieg ich "benutzername", die zwischen von_alter und bis_alter sind?

Vielen Dank für alles Sinnvolle

Seppel

bei Antwort benachrichtigen
(Anonym) Seppel „SQL-Fachmann gesucht“
Optionen

Warum bestimmst Du nicht schreibst Du das Alter nach dem Du suchen willst nicht schon vorher durch setzen von von_tag, von_monat, von_jahr und bis_tag, ... fest und machst dann ein
"select benutzername from X
where
  (geburtsjahr > von_jahr and geburtsjahr   ((geburtsjahr = von_jahr and
    (geburtsmonat > von_monat or
    (geburtsmonat = von_monat and geburtstag > von_tag)) or
  ((geburtsjahr = bis_jahr and
    (geburtsmonat     (geburtsmonat = bis_monat and geburtstag Müsste doch eigentlich gehen, oder? Das mit dem Between wird nicht so ohne weiteres gehen, da Du den Vergleich nur richtig mit dem date Datentypen machsen kannst.
Du könntest auch eine zusätzliche Spalte in die Tabelle einfügen, in der das Geburtsdatum komplett steht, d.h. z.B. "01.01.1900" und dann bräuchtest Du nur ein
"select benutzername from X
where geburtsdatum between '01.01.1900' and '01.01.1970'"

bei Antwort benachrichtigen