PHP/MySQL: Suche nach Alter über Geburtsdatum realisieren

  • #1
P

Patrick1585

Bekanntes Mitglied
Themenersteller
Dabei seit
27.03.2003
Beiträge
112
Reaktionspunkte
0
Ort
Oberhausen
Hallo!

Ich wollte für meine Website eine Suche Programmieren und den Usern die Möglichkeit geben auch User nach Alter zu Suchen. In meiner DB ist nicht das Alter sondern das Geburtsdatum im Format TT.MM.JJJJ Gespeichert. Denn wenn ich das Alter in der DB hätte müsste jedes Mitglied sein Alter jedes Jahr Updaten. Wäre ja schwachsinn.

Also, gibt es ein möglichkeit solch eine Suche zu Realisieren?


Für Vorschläge, Anregungen oder sogar Lösungen wär ich mehr als dankbar! Schonmal Danke im Voraus!


Frohe Weihnachten euch allen :)!!!
 
  • #3
Moin

voilà: SELECT YEAR(DATE_SUB(NOW(), INTERVAL (TO_DAYS(geburtstag)) DAY))

Greetz
M.
 
  • #4
Hallo!
Versteh ich nicht die DB-Abfrage. Wo soll das Anfangs- und das Höchstalter hin? Muss das alter in ein Timestamp umgewandelt werden?
 
  • #5
Michael_B schrieb:
Moin

voilà: SELECT YEAR(DATE_SUB(NOW(), INTERVAL (TO_DAYS(geburtstag)) DAY))

Greetz
M.

Sorry Michael,
aber so einfach läßt sich das Kind nicht gebähren.

Deine Abfrage ist im Prinzip scho´ richtig, aber bei Patrick liegen die Daten im Format dd.mm.yyyy vor, deine Abfrage funktioniert zwar wenn sie im MySQL Date-Format (yyyy-mm-dd) vorliegen, aber dem ist leider nicht so.
Außerdem muss der Abfrage noch mitgeteilt werden in welcher Tabelle sie suchen soll.

Bsp.

SELECT YEAR( DATE_SUB( NOW( ) , INTERVAL( TO_DAYS( geburtstag ) ) DAY ) ) FROM user

@Patrick
Diese Abfrage funktioniert wenn, wie oben erwähnt, deine Geburtstage im Format yyyy-mm-dd vorliegen.
Ich würde dir Vorschlagen es auch so in die Tat umzusetzen.
Du kannst ja, wenn sich deine User registrieren, das Geb-Dat 2mal in der Tabelle speichern.
1. so wie bisher, damit du an deiner Seite nicht soviel ändern musst.
2. Im Format->yyyy-mm-dd' für die Altersabfrage

Dazu legst du über PhpMyAdmin in der Tabelle eine neue Spalte vom Typ DATE an, und nennst sie z.B geburtstag2.

um die bestehenden Geburtstage nich alle von Hand umrechnen zu müssen kannst du dir ja eine kleine Funktion schreiben, die das für dich erledigt. (wenn´s nur ein paar sind, kannst´e es auch per Hand machen).
Falls du Hilfe für die Funktion brauchst, melde dich nochmal.

gruss conny
 
  • #6
Hallo!
Hatte mir gestern schon ne funktion geschrieben und alle daten in das von dir genannte format geändert.
Also wie kann ich die abfrage von michael jetzt nutzen? mit mysql kenn ich mich noch nicht so gut aus.
 
  • #7
Code:
<?
/** 
Abfrage nach einem Bestimmten Alter 
Hierbei ist 
   $_REQUEST['alter'] das gewünschte Alter
   user = Deine Tabelle
   geburtstag = Deine Spalte mit den Geburtstagsdaten
*/
$sql =->SELECT id, name 
        FROM user 
        WHERE YEAR( DATE_SUB( NOW( ) , INTERVAL( TO_DAYS( geburtstag ) )DAY ) )='.$_REQUEST['alter'].'      
        ORDER by name ASC'; 

/** 
Abfrage nach Min und Max Alter 
Hierbei ist 
   $_REQUEST['min_alter'] das gewünschte Mindest-Alter
   $_REQUEST['max_alter'] das gewünschte Maximal-Alter
   user = Deine Tabelle
   geburtstag = Deine Spalte mit den Geburtstagsdaten
*/
$sql =->SELECT id, name 
         FROM user 
         WHERE YEAR( DATE_SUB( NOW( ) , INTERVAL( TO_DAYS( geburtstag ) )DAY ) ) 
         BETWEEN->.$_REQUEST['min_alter'].' AND->.$_REQUEST['max_alter'].' 
         ORDER by name ASC'; 

?>

gruss conny
 
  • #8
Hallo!

DANKE!!! Funktioniert echt super!
 
  • #9
Gibt´s jetzt % bei den Models auf deiner HP :D
christin85 würde mir schon gefallen :D
 
  • #10
Schreib sie einfach an über Model Buchen.

Versuch dein Glück ;)
 
  • #11
Hab da doch nochmal eine frage. Die suche besteht ja nicht nur aus der Alterssuche. Ist es möglich in diese DB-Abfrage noch andere suchkriterien zu integrieren?
 
  • #12
$sql =->SELECT id, name
FROM user
WHERE (YEAR( DATE_SUB( NOW( ) , INTERVAL( TO_DAYS( geburtstag ) )DAY ) )
BETWEEN->.$_REQUEST['min_alter'].' AND->.$_REQUEST['max_alter'].')
AND bh=75d
AND (schuhgroesse = 40 OR schuhgroesse = 50)
AND haarfarbe = blond rosa getupft
AND ...
AND ...
AND ...
ORDER by name ASC';
 
  • #13
Hallo!

Ach doch so einfach :).

DANKE nochmal!!!
 
  • #14
Conny schrieb:
Michael_B schrieb:
Moin

voilà: SELECT YEAR(DATE_SUB(NOW(), INTERVAL (TO_DAYS(geburtstag)) DAY))

Greetz
M.
Deine Abfrage ist im Prinzip scho´ richtig, aber bei Patrick liegen die Daten im Format dd.mm.yyyy vor, deine Abfrage funktioniert zwar wenn sie im MySQL Date-Format (yyyy-mm-dd) vorliegen, aber dem ist leider nicht so.
Außerdem muss der Abfrage noch mitgeteilt werden in welcher Tabelle sie suchen soll.

Moin,

wenn das Datum in ein DATE-Feld eingetragen ist, ist es IMHO völlig egal wie es aussieht, im Hintergrund wird ohnehin der Timestamp (oder ein ähnliches Format) gespeichert... und dass das ganze noch auf ne Tabelle angewendet werden muss ist mir auch klar, aber das hab ich mal vorausgesetzt, dass das bekannt ist. Aber naja... wie ich feststelle, lag ich da wohl falsch. SRY

Greetz
M.
 
  • #15
Patrick_N schrieb:
Hallo!
Versteh ich nicht die DB-Abfrage. Wo soll das Anfangs- und das Höchstalter hin? Muss das alter in ein Timestamp umgewandelt werden?

Von einem Anfangs- und Höchstalter war in deinem ersten Beitrag nicht die Rege ;)

EDIT: Doch, ich nehme alles zurück und behaupte das Gegenteil!
Wer lesen kann ist klar im Vorteil *g*

Greetz
M.
 
  • #16
Hallo!
Hab ich nachher auch bemerkt. Naja jetzt funktionierts ja. Trotzdem danke für deine hilfe!
 
  • #17
@Michael

wenn das Datum in ein DATE-Feld eingetragen ist, ist es IMHO völlig egal wie es aussieht, im Hintergrund wird ohnehin der Timestamp (oder ein ähnliches Format) gespeichert...

EDIT: Doch, ich nehme alles zurück und behaupte das Gegenteil!
Wer lesen kann ist klar im Vorteil *g*

Dann musst du aber auch alles lesen:

In meiner DB ist nicht das Alter sondern das Geburtsdatum im Format TT.MM.JJJJ

d.H. das Feld ist nicht von TYP ->DATE'

Dann versuch mal z.B die folgende in einem Abfrage mit einem->DATE'-Feld auszuführen:

Code:
UPDATE user SET geburtstag =->10.05.1974' WHERE id = 1;

Ergebnis: 0000-00-00

gruss conny
 
  • #18
Hallo!

Ich hoffe hier Antwortet noch einer sonst muss ich einen neuen Tread auf machen.

Habe da noch ein Problem zu meiner Suche.
Ich wollte noch ein Umkreissuche integrieren. Habe schon die Geo-Daten in meiner DB in einer neuen Tabelle gespeichert. Die Postleitsahelen der Mitglieder sind leider nicht allein in einem Feld gespeichert sondern so D-46145. Also wie kann ich das realisieren und in meinen bisherigen Query-String integrieren?

Eine Formel zur Entfernungsberechnung hab ich aber wie baue ich das in meinen Query-String ein?
 
  • #19
Hi Patrick,

auf jeden Fall würde ich dir empfehlen, deinen bestand der PLZ zu renovieren.
D.h strikte Trennung von Land und PLZ.

Trotzdem ein Beispiel wie es momentan gehen müsste:

Code:
<?
/**
Suche nach bestimmter PLZ
Hierbei ist:
   $_REQUEST['plz'] = Die zu suchende PLZ
   user = Deine Tabelle
   plz  = Die Spalte mit den Postleitzahlen
   id   = Datensatznummer
   namme = Name des Modells zb. Christin85
*/
$sql =->SELECT id, name 
        FROM user 
        WHERE RIGHT(plz, 5) =->.$_REQUEST['plz'].' 
        ORDER by name ASC';
?>
 
  • #20
Hallo!
Die suche nach einer bestimmten oder den anfangszahlen einer Plz habe ich ja schon so realisiert:
Code:
$sql = SELECT id, land_plz FROM .$table. WHERE land_plz LIKE->%.$plz.' ORDER BY id DESC;

Wollte jetzt aber noch eine Umkreissuche integrieren. Habe schon eine Tabelle in meiner DB mit allen Längen- und Breitengraden von allen Deutschen Städten. Habe aus den Scripten der OpenGeoDB volgenden Code herausgesucht.
Code:
/*
Beispiel Orte
*/
$breite1 = 50.11222; //frankfurt
$laenge1 = 08.68194; //frankfurt
$breite2 = 52.52222; //berlin
$laenge2 = 13.29750; //berlin


$distance = IFNULL((ACOS((SIN(.$breite1.)*SIN(RADIANS(.$breite2.))) + (COS(.$breite1.)*COS(RADIANS(.$breite2.))*COS(RADIANS(.$laenge2.)-.$laenge1.)))*6378,388;
$table = geodb_locations;
$maxRadius = 20;
$sql = SELECT *, .$distance. AS e FROM .$table. WHERE .$distance. < .$maxRadius. ORDER BY e ASC
So jetzt weiß ich aber nicht wie ich das in meinen Query einbauen soll. Getestet ist dieser Code aber auch noch nicht. Dieses Feld e wird wahrscheinlich das der Postleitzahlen sein oder? dies stammt auch noch aus dem Original Code.

Hab leider nich so viel ahnung in mysql.
 
Thema:

PHP/MySQL: Suche nach Alter über Geburtsdatum realisieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben