Patrick: Datenbank mit mehreren kriterien durchsuchen

Hallo,
ich möchte eine Suche auf meiner Seite integrieren. Es sind 5 Suchkriterien. Eine der Suchkriterien ist das das Alter und das ist auch mein problem. Wenn der User 18 eingibt sollen Mitglieder die 18 +-2 Jahre alt sind finden. Diese Mitglieder stehen in einer Datenbank. Eine abfrage nur nach alter in dieser form kann ich aber nicht wenn noch andere kriterien dazu kommen. könnt ihr mir da helfen?

Mit freundlichen Grüßen,
Patrick

  1. Hallo Patrick,
    Du meinst was in der Richtung

    SELECT name, alter, geschlecht FROM user WHERE ((age>$iSucheAge-2) OR (age<$sSucheAge+2)) AND geschlecht='$sSucheGeschlecht';

    Habe ich das richtig verstanden?
    Schick doch mal Deinen aktuellen Query-String und ne genau Beschreibung, über welche Tabellen oder Spalten die Abfrage gehen soll...

    Schöne Grüße

    Alex

  2. Hi Patrick,

    ich möchte eine Suche auf meiner Seite integrieren. Es sind 5 Suchkriterien. Eine der Suchkriterien ist das das Alter und das ist auch mein problem. Wenn der User 18 eingibt sollen Mitglieder die 18 +-2 Jahre alt sind finden. Diese Mitglieder stehen in einer Datenbank. Eine abfrage nur nach alter in dieser form kann ich aber nicht wenn noch andere kriterien dazu kommen. könnt ihr mir da helfen?

    Erst mal müsstest du das min und das max alter Berechnen:

    //Default Werte setzen
    $min_alter = 0;
    $max_alter = 99;

    if(is_numeric($_POST['alter'])) //Kontrollieren, ob gültige Werte überliefert wurden
    {
      //Wenn ja, dann Werte oben überschreiben:
      $min_alter = $_POST['alter'] -2;
      $max_alter = $_POST['alter'] +2;
    }

    //SQL Query zusammenbasteln
    $sql = "SELECT
              name,
              nochwas
            FROM
              tabelle
            WHERE
              jahre_alt >= $min_alter && jahre_alt <= $max_alter
            ";
    //und abschicken
    $return = mysql_query($sql) OR die(mysql_error());

    Habs natürlich nicht getestet, aber so in etwas könnetst du es machen. Ich hab auch direkt noch eine Kontrolle reingemacht, ob der überlieferte Wert numerisch ist.

    Wäre das etwas, was dem entspräche, was du brauchst?

    (Du musst die Spaltennamen natürlich noch anpassen, hab die Alters Spalte mal jahre_alt genannt, da eine Spalte in MySQL ja nicht 'alter' genannt werden darf.)

    MfG, Dennis.

    PS: Weiterführende Links:

    --
    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
    Zufällige Hinweise:
    ------------------------
    Newbies aufgepasst: Auf viele Fragen findet man eine
    Antwort im Archiv, das man auch durchsuchen kann
  3. Hallo,
    mir ist gerade eingefallen das ich das alter als geburtsdatum in der db habe. wie kann ich das denn jetzt machen? aber eure vorschläge sind genau das was ich meine.

    Mit freundlichen Grüßen,
    Patrick

    1. Hallo,

      mir ist gerade eingefallen das ich das alter als geburtsdatum in der db habe. wie kann ich das denn jetzt machen?

      Vorschlag: Geburtsdatumse in timestamps umwandeln. Vergleich dann in etwa so, wie dir bereits mehrfach vorgeschlagen wurde, nur halt mit timestamps.

      aber eure vorschläge sind genau das was ich meine.

      hä?

      Grüsse
      Frankie

      1. Hallo,
        das gebdatum ist im format TT.MM.JJJJ in der db. was muss ich genau machen?

        Mit freundlichen Grüßen,
        Patrick

        1. Hallo,

          das gebdatum ist im format TT.MM.JJJJ in der db. was muss ich genau machen?

          Das ist denkbar ungünstig, da dies für MySQL kein Datum darstellt, daher mußt du den Wert erstmal in Einzelteile zerlegen.

          Dazu gibt es in MySQL eine Menge geeigneter Funktionen:

          http://dev.mysql.com/doc/mysql/de/String_functions.html

          Jetzt "baust" du dir aus den Einzelteilen einen (gültigen) timestamp für das Geburtsdatum und vergleichst ihn z.B. mit Heute, ermittelst die Differenz in Jahren, usw.

          Nützliche Funktionen dazu gibt es z.B. hier:

          http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html

          Wenn du noch Zeit- und Datumsfunktionen für PHP brauchst, die Beschreibung findest du u.a. hier:

          http://de3.php.net/manual/de/ref.datetime.php

          Wie du siehst, gibt es eine Menge Möglichkeiten dein Vorhaben umzusetzen, aber wie du es letzemdlich machst, bleibt deine Entscheidung.

          Ich persönlich würde aber, bevor ich weitermache, die Geburtsdatumse erstmal in einem SQL-geeignetes Datumsformat konvertieren, spart meiner Meinung nach einiges an Arbeit.

          Viel Spaß und schöne Weihnachten
          Frankie

          1. Kleine Korrektur:

            Jetzt "baust" du dir aus den Einzelteilen einen (gültigen) timestamp für das

            ^^^^
            ... ein SQL-konformes Datum und ermittelst darus den timestamp ...

            Grüsse
            Frankie