PHP/MySQL: Suche nach Alter über Geburtsdatum realisieren

  • #21
Langsam mit der Mutter!

Du darfst 2 Sachen nicht verwechseln!!!

1. Den Bestand der OpenGeoDB
2. Den Bestand deiner Modell Tabelle

Du musst deine Suche so aufbauen, dass der Besucher erst einen Ort bzw. PLZ eingibt.
Aus dieser Ergebnissmenge musst du die PLZ extrahieren und mit deiner Tabelle vergleichen.
Dazu kannst du mein erstes Bsp. oder deine Abfrage nehmen.

gruss conny
 
  • #22
Die Suche funktioniert jetzt bis auf die Umkreissuche. Einfach nach Plz suchen geht auch aber will zusätzlich noch die Umkreissuche haben.
 
  • #23
1. Ganz klar gefällt mir das alte Design besser.
2. Du musst dir darüber im klaren sein, dass die Umkreissuche nur in D, A und CH funktionieren wird. Dies musst du deinem Besucher sagen.
3. Eine Umkreissuche von 400km ist WAHNSINN, bedenke nur einmal wieviele Möglichkeiten sich daraus ergeben würden. (Karte)

bots_ger.jpg

Ich will dir nicht mit Gewalt die Umkreissuche ausreden, ist ja ne´ schöne Spielerei.
Allerdings würde ich dir Vorschlagen die Suche auf Bundesländer zu beschränken.
So bekommst du es auch mit den Ländern gelöffelt, die nicht in der OpenGeoDB sind.
(OK, in der CH heiß es Kanton. In PL hab ich k.A).

Ausserdem ist es für den Besucher besser, wenn er über Bundeslandsuche einige Ergebnisse bekommt, als das er in 10 Umkreissuchen gar keine Treffer hat.

Aber das musst du selbst entscheiden.
Falls du es dennoch wünschst, machen wir Morgen weiter da jetzt POWER OFF angesagt ist.

Guat´s Nächtle conny

PS: in der SetCard männlich ist ein Schreibfehlerchen :)
 
  • #24
Hab es nicht so mit dem Designen. Mir gefällt die neue auch nicht aber die alte kann ich auch nicht mehr sehen. Na ja, mal sehen was ich mache. Bis die neuen Funktionen der neuen HP fertig sind dauerts wohl noch und da hab ich ja genug Zeit zum überlegen was ich mit dem Design mache.

Werde die Anmeldung auf D, A und CH begrenzen. Reicht ja. Was für ein Umkreis wäre denn höchstens zu empfehlen? 200km? Eine Suche nach Bundesländer könnte man ja noch zusätzlich dazu machen. Gute Idee :)! Also kann dann der Besucher selber entscheiden ob er eine Suche nach Bundesland machen möchte oder eine Umkreissuche. Aber von der Umkreissuche möchte ich mich irgendwie nich trennen :-\.

Oh, man die Suche wird immer Koplizierter. Komm jetzt schon nicht mehr klar. Wenn die fertig ist mach ich drei Kreuze. Hoffe das du mir noch weiterhin helfen wirst. Darüber wäre ich sehr dankbar. Bin ja jetzt schon sehr dankbar für die Hilfe bisher.

Wo ist der Fehler denn?
 
  • #25
Hi Patrick,
erstmal auch ein guats neues!

Machen wir jetzt wieder hier weiter.

Poste mal einen Beispiel SQL-String in dem all deine Suchoptionen enthalten sind, damit ich auf den neuesten Stand komme.

gruss Conny
 
  • #26
Hi Conny!

Code:
$sql = SELECT * FROM sd_models WHERE 
        land_plz LIKE->DE%' AND 
        (geo_id =->14820' OR geo_id =->15883' OR geo_id =->21167' OR geo_id =->21905' ) AND 
        (YEAR( DATE_SUB( NOW( ) , INTERVAL( TO_DAYS( gebdatum ) )DAY ) ) BETWEEN 16 AND 18) AND 
        geschlecht =->w' 
    ORDER BY->gebdatum' DESC LIMIT 0,20;

Ist jetzt der SQL-String aus einer Suchanfrage!
 
  • #27
Code:
if($_REQUEST['sort'] != egal) {
    switch ($_REQUEST['sort']) {
        case plz:      
            $o = ($_REQUEST['land'] == DE) ? RIGHT(land_plz,5) : RIGHT(land_plz,4);
            break;
        case entfernung:
            $o = geo_id;
            break;
        case alter_max:
        case alter_min:
            $o = gebdat;
            break;

        ...........
       
    }

    $f = ($_REQUEST['folge'] == DESC) ? DESC : ASC;
    $o = ORDER BY .$o. .$f; 
    
}

$sql =  .............. .$o. LIMIT ...... ;

Theoretisch sollten die geo_id´s schon nach Entfernung sortiert aus der Datenbank kommen.
Allerdings kommt es auf deine Abfrage an, wie du die geo_id´s holst.
 
  • #28
Die Sortierung nach Plz Funktioniert aber die Sortierung nach Entfernung nicht. Also so wie es in deinem Code aussieht muss ich nach geo_id Sortieren oder hab ich da was falsch verstanden?
 
  • #29
So stehts im code
 
  • #30
naja, funktioniert aber leider nicht.
 
  • #31
Hi Conny!
Habe mir den Code mal aus der GeoClass angeschaut und volgendes gefunden.

Code:
        $query = SELECT *, ;
        $query .= $this->getDistanceFormula($geoObject). AS distance;
        $query .=  FROM .$this->options['table'].;
        $query .=  WHERE .$this->getDistanceFormula($geoObject). < $maxRadius;
        $query .=  ORDER BY distance ASC;

Hier wird nach distance sortiert, aber in der GeoDB ist garkein Feld das Distance heißt. Wie ist das gemeint? Und was bedeutet AS distance?

Habe mir eine Suche gebastelt wo man nur die Plz eingibt und dann in einem Umkreis von zB 30km die Orte aus der GeoDB holt. Wenn ich die Abfrage genau wie oben benutze also nach distance Sortiere und mit diesem AS distance funktioniert die Sortierung. Funktioniert aber leider nicht in meiner Suche.
 
  • #32
Holla,

1. Schuljahr lieber Patrick.  ??? ??? ??? ???

AS -> Als (die Engländer sparen sich das l)
Distance -> der Abstand

und nach was willst du in deiner Abfrage sortieren?

nach dem Abstand

so was sollte muss man eigentlich wissen. Ansonsten Wörterbuch oder LEO

zu dem SQL-String den du gefunden hast.
Frei nach Schiller übersetzt heißt das ungefähr so:
Suche alles,
nehme aus dem Objekt x das Feld y als Enterfernung
suche in der Tabelle t
Bedingung ist aber das dieses Feld y(Entfernung) kleiner als die maximal erlaubte Entfernung ist
und alles wird sortiert nach Feld y(Entfernung)

(Hoffentlich liest ausser dir keiner den Schiller´chen SQL-String)

und das ist doch genau das, was du willst.
Dieses habe ich dir aber schon gesagt !!!

Theoretisch sollten die geo_id´s schon nach Entfernung sortiert aus der Datenbank kommen.
Allerdings kommt es auf deine Abfrage an, wie du die geo_id´s holst.

gruss conny
 
  • #33
Hallo!
Dachte es wäre ein Feld in der DB. Deswegen hab ich nie dran gedacht es mal zu Übersetzten. Na ja, jetzt weiß ich ja was gemeint ist.

Würde mich freuen wenn du dir mal mein Suche Script durchgucken würdest und mir mein Fehler sagen könntest den ich gemacht habe das es nicht funktioniert.
 
  • #34
Probier mal das aus:
Code:
// NEU - Anfang
$treffer_query = $db->query(SELECT *, .$distance. AS distance FROM .$tabelle['geo']. WHERE .$distance. < .$umk. ORDER by distance ASC);
// NEU - Ende
		  
// ALT - Anfang
#$treffer_query = $db->query(SELECT *, .$distance. FROM .$tabelle['geo']. WHERE .$distance. < .$umk);
// ALT - Ende

Du musst wie ich schon mehrfach erwähnte, die geo_id´s schon sortiert aus der geo_db holen !!!
Eine nachträgliche Sortierung in der model_db ist NICHT möglich.

gruss conny

PS: diese Lösung hast du aber schon 2x gepostet, aber in dein Script eingebaut haste es nicht !!!

PS 2: Dein Script ist ja fast identisch mit meinem Beispiel-Script  ;D ;D
 
  • #35
Habs so gemacht funktioniert aber leider auch nicht!

Hab mir bei der Suchanfrage den SQL-String ausgeben lassen. Wenn ich die Plz von Oberhausen eingebe ist auch in dem String die ID von Oberhausen als erstes zu sehen, aber die ergebnisse sind nicht nach Distance sortiert. Die Sotierung nach geo_id habe ich entfernt. Wo kann jetzt noch was falsch sein?
 
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