|
View:
New views
7 Messages
—
Rating Filter:
Alert me
|
|
|
Ausgabe verschiedener Einträge mit gleicher PLZ
-- Mailingliste OpenGeoDB Listenadresse: opengeodb@... Informationen: http://opengeodb.de Mit freundlicher Unterstütztung von php::bar (http://phpbar.de) |
|
|
|
Re: Ausgabe verschiedener Einträge mit gleicher PLZDie Frage wurde schon dutzende Male gestellt. Schau mal in die Archive und fuege es gegebenenfalls dem Wiki hinzu. Schoenen Gruss Martin |
|
|
|
Re: Ausgabe verschiedener Einträge mit gleicher PLZ
Hallo Martin, natürlich habe ich in den Archiven nachgesehen (bereits vor meinem ersten Posting). Leider ist die Darstellung der Archive etwas "unübersichtlich", eventuell habe ich da eine mögliche Antwort übersehen. Ich werde die Archive (bzw. das Forum mittels Suchfunktion) nochmals durchforsten, falls jemand in der Zwischenzeit die Lösung bzw. Hinweise zur Lösung des Problems gefunden hat wäre es super, diese hier zu posten. Gruß, Martin |
|
|
|
Re: Ausgabe verschiedener Einträge mit gleicher PLZMBecker wrote:
> natürlich habe ich in den Archiven nachgesehen (bereits vor meinem ersten > Posting). Leider ist die Darstellung etwas "unübersichtlich", eventuell habe > ich da eine mögliche Antwort übersehen. Eine Suchfunktion wäre wirklich > hilfreich. Hallo Martin, wo hast du denn nachgesehen? Google kennt die Archive und durchsucht sie auch. Auch http://www.nabble.com/Php-German---opengeodb-f13171.html bietet eine Suchfunktion. > Ich werde die Archive nochmals durchforsten, falls jemand in der > Zwischenzeit die Lösung bzw. Hinweise zur Lösung des Problems gefunden hat > wäre es super, diese hier zu posten. Schon alleine die letzten Beiträge drehten sich immer wieder um dieses Thema. Du willst etwas mit SQL umsetzen, wo du das Problem vielleicht verkennst - denn bist du sicher, dass dir der ERSTE Eintrag helfen würde und der richtige wäre? Ein Ort -> mehrere PLZ eine PLZ -> mehrere Orte Typischerweise lautet die Antwort auf deine Frage "PLZ.tab" - vielleicht ist es das, nach dem du suchen solltest. Schönen Gruß Martin -- Mailingliste OpenGeoDB Listenadresse: opengeodb@... Informationen: http://opengeodb.de Mit freundlicher Unterstütztung von php::bar (http://phpbar.de) |
|
|
|
Re: Ausgabe verschiedener Einträge mit gleicher PLZEs geht mir nicht um möglich Relationen zwischen PLZ und Ort sondern um die Begrenzung der gefundenen Treffer.
Beispiel: Bei PLZ 12345 -> Anzeige: Niederlassung A Obwohl zu dieser PLZ aber mehr Niederlassungen existieren, wird nur diese eine angezeigt. Sprich in der DB stehen PLZ | Ort | Niederlassung ----------------------------- 12345 Ort 1 A 12345 Ort 1 B 23456 Ort 2 C Der Rest funktioniert ja so wie er soll, nur die Begrenzung auf nur "einen" Treffer finde ich nicht. Gruß, Martin |
|
|
|
Re: Ausgabe verschiedener Einträge mit gleicher PLZAch so - Du willst also gar nicht auf 1 eingrenzen, sondern im
Gegenteil, die Begrenzung aufheben, von der Du nicht weißt, woher sie kommt... Das war in deinen vorigen Mails nicht so besonders deutlich - Du schriebst nur: "Ich habe mir die Codes angesehen (bin zwar kein Code-Profi, aber mehr als Grundlagenwissen denke ich schon vorweisen zu können), aber ich kann dort nichts finden, was die Treffer für eine PLZ auf "LIMIT 1" stellen könnte." Das kann man nunmal in beide Richtungen interpretieren. Das Problem dabei ist nur: ich habe keine Ahnung, mit was für Code du arbeitest. Sprichst Du vielleicht nicht (nur) von der opengeodb, sondern von der GeoClassPHP? Die nutzt die openGeoDB zwar als Datengrundlage, ist aber nicht die opengeodb ;) Wenn Du selbst geschriebenen SQL-Code nutzt, wovon Martin vermutlich ausgeht, dann ist es ziemlich blöd, ins Blaue hineinzuraten. Wenn Du die GeoClassPHP benutzt, melde Dich nochmal - da ich die nicht selbst benutze und es insofern nicht im Kopf habe, hab ich grade keine Lust, auf Verdacht in deren Code zu gucken. Gruß jongleur (Peter Wendorff) MBecker schrieb: > Es geht mir nicht um möglich Relationen zwischen PLZ und Ort sondern um die > Begrenzung der gefundenen Treffer. > > Beispiel: > Bei PLZ 12345 -> Anzeige: Niederlassung A > > Obwohl zu dieser PLZ aber mehr Niederlassungen existieren, wird nur diese > eine angezeigt. > > Sprich in der DB stehen > PLZ | Ort | Niederlassung > ----------------------------- > 12345 Ort 1 A > 12345 Ort 1 B > 23456 Ort 2 C > > > Der Rest funktioniert ja so wie er soll, nur die Begrenzung auf nur "einen" > Treffer finde ich nicht. > > > Gruß, > Martin > -- Mailingliste OpenGeoDB Listenadresse: opengeodb@... Informationen: http://opengeodb.de Mit freundlicher Unterstütztung von php::bar (http://phpbar.de) |
|
|
|
Re: Ausgabe verschiedener Einträge mit gleicher PLZHallo Peter,
es wird die GeoClass Version 0.3.1a benutzt, wobei ich denke das der Inhalt der Geo.php eher für die Koordinatenberechnung der Objekte zuständig ist. Inhalt der Seracher.php (denke dort muss es irgendwo sein, kann´s aber nicht finden) Class Searcher { /** * An array of Dealer objects. * * @var array of Dealer objects */ var $Dealers; /** * GeoObject representing the customer location. * * @var Geo_Object */ var $customerLocationGeoObject; /** * The Geodb object, it´s used for the geodb->findGeoObject() method. * * @var Geodb */ var $geodb; /** * Is true if the search rendered multiple locations, * but (AND) nothing is selected in the lid1 select field. * @var boolean */ var $noUniqueMatches = false; /** * is true if the search rendered no matches * * @var boolean */ var $noMatchesFound = false; /** * Constructor. Opens a db connection and retrieves all the Dealers * from the db and stores them in the $Dealers array. * * @return Searcher */ function Searcher() { $this->geodb = Utilities :: getGeodbObject(); $this->_retrieveDealersFromDb(); } /** * Is used in the constructor to build the dealer objects from the db. * Is private, dont use in public context. May change soon. * */ function _retrieveDealersFromDb() { // mod // This query now retrieves all the columns required later in the script $query = "SELECT * FROM ".DEALERS_TABLENAME." "; # LIMIT 2 # echo "<br>Query in retrieveDealersFromDb: <br>$query <br>"; $rs = mysql_query ($query) or die(mysql_error()); while ($r = mysql_fetch_assoc($rs)) { // Pass the query result array to the Dealer class constructor $this->Dealers[$r['id']] = new Dealer($r); } } /** * Creates a Geo_Object for the customer location. * Returns true if one or more locations match the user input, * false if there are no matches. * * Also sets the variables * $this->noUniqueMatches and * $this->noMatchesFound. * * @param string $CostumerLocationName City name or PLZ for the customers location * @return boolean matches found */ function setcustomerLocation($customerLocationName) { // takes a string as argument representing any type that // the geoclass can search for (eg a Ortsname or PLZ) if ($customerLocationName == '') { // if form has been submitted empty exit ('<p>Bitte geben Sie etwas in das Formularfeld ein.<p>'); } $possibleLocations = $this->geodb->findGeoObject('%'.$customerLocationName.'%'); if (count($possibleLocations)) { // if any matches have been found (unique OR mutliple) $sel_field = '<select name="lid1" onchange="javascript:document.getElementById(\'formSent\').click();">'; if (sizeof($possibleLocations) > 1) { // if the input matches to more than one geographic location // the different location names are stored // in the sel_field html select field. $sel_field .= '<option value="">- bitte auswählen -</option>'; if ($_GET['lid1'] == '') { // if nothing had been selected from the multiple matches $this->noUniqueMatches = true; } } else { // only one match found $obj1 = $possibleLocations[0]; } foreach ($possibleLocations AS $obj) { if ($_GET['lid1'] == $obj->databaseValues['loc_id']) { $obj1 = $obj; $sel = 'SELECTED'; $one_matched = true; } else { $sel = ''; } $sel_field .= '<option value="'.$obj->databaseValues['loc_id'].'" '.$sel.'>'.utf8_encode($obj->name).'</option>'."\n"; } if ((!$one_matched) && (sizeof($possibleLocations) > 1)) { $this->noUniqueMatches = true; } $sel_field .= "</select>\n"; } else { // if no matches are found echo "<p>Ein solcher Ort konnte nicht gefunden werden</p>"; $sel_field .= "- keine Treffer - "; $this->noMatchesFound = true; return false; } echo $sel_field; $this->customerLocationGeoObject = $obj1; return true; } /** * Finds the nearest dealers around the costumerLocationObject * * @param int $number_of_results Number of results to be returned. * @return sorted Array of Dealer objects. */ function getNearestDealers($number_of_results = 5) { // finds the nearest dealers around the the // customerLocationGeoObject. // Build a Geo_Object from the location entered by the user. $i = 0; $distances = array(); foreach ($this->Dealers as $number => $dealer) { $geoObject = $dealer->getGeo_Object(); if (! is_object($geoObject)) echo "<br> Error: Geo_Object not loaded!<br>"; $dist = round($geoObject->getDistance($this->customerLocationGeoObject, GEO_UNIT_KM), 2); $distances["$dist"] = $dealer; unset ($dist); } ksort($distances, SORT_NUMERIC); $counter = 0; foreach ($distances as $k => $v) { if ($counter < $number_of_results) { $temp[$k] = $v; } $counter ++; } unset ($counter); $distances = $temp; foreach ($distances as $num => $item) { $item->setDistance($num); $temp[$num] = $item; } $distances = $temp; if (!($this->noUniqueMatches or $this->noMatchesFound)) { return $distances; } elseif ($this->mutlipleChoices) { $distances = array (0 => "multiple matches found"); return $distances; } elseif ($this->noMatchesFound) { $distances = array (0 => "no matches found"); return $distances; } } /** * NOT IN USE ANY MORE // DEPRECATED USE * * @param string $header_dist * @param string $header_dealer * @return unknown */ function getHtmlTableWithNeaerstDealers($header_dist = 'dist', $header_dealer = 'Dealer') { $distances = $this->getNearestDealers(); if (!($this->noUniqueMatches or $this->noMatchesFound)) { $html = "<table><tr><th></th> <th>$header_dist</th><th>$header_dealer</th></tr>\n"; foreach ($distances as $dist => $dealer) { # echo "<br>Variable dealer (in getHtmlTabe...):<br><pre>".print_r($dealer)."</pre>"; $html .= "<tr>"; $graph = ' $html .= "<td class=\"graph\">$graph</td>\n"; $html .= "<td class=\"dist\">".str_replace('.', ',', $dist)." km</td>\n"; $DbValues = $dealer->getDbValues(); $name = $DbValues['firma']; $loc = $DbValues['ort']; $plz = $DbValues['plz']; $html .= "<td class=\"dealer\">$name ($plz $loc)</td>\n"; $html .= "</tr>\n"; } // only return table if no multiple choices are given return $html.'</table>DEPRECATED // DONT USE THIS FUNCTION'; } elseif ($this->mutlipleChoices) { return '<p>multiple matches, please choose!<p>'; } elseif ($this->noMatchesFound) { return '<p>no matches found, please try again</p>'; } } /** * Returns an array with all the Dealer objects from the database. * Dealer ids are the array keys. * * @return array of Dealer objects. */ function getDealersArray () { return $this->Dealers; } /** * Returns the Dealer objects with the matching id. * * @param int $id * @return Dealer object */ function getDealer ($id) { $d = $this->Dealers[$id]; if (is_object($d)) { return $d; } else { return "no such Dealer with id $id"; } } /** * Returns the Geo_Object that represents the costumers location. * * @return Geo_Object */ function getcustomerLocationGeoObject () { return $this->customerLocationGeoObject; } } Gruß, Martin |
| Free embeddable forum powered by Nabble | Forum Help |