Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Doppelergebnisse auf ein Ergebnis reduzieren

Hi,

ich habe eine PLZ-Datenbank und möchte meinen Usern ermöglichen, über die Eingabe eines PLZ-Bereichs (Bsp. 73) die darin enthaltenenen Orte anzeigen zu lassen.

Wenn ich die Anfrage starte, bringt er mir natürlich alle enthaltenen PLZ und Orte (Bspw. 73001 GP, 73003 GP, 73005 GP, ...) Wie kann ich es nun erreichen, dass er mir bei Mehrfachaufkommen nur einmal GP schreibt und dann zum nächsten Ort übergeht?

Danke schon mal im Voraus ...

Sven

Hier gehts zum Orginal Eintrag "Doppelergebnisse auf ein Ergebnis reduzieren" im Forum

Antworten

foreach ($daten as $data) # Datensätze mit PLZ und Orten
{
list($plz, $ort) = explode(' ', $data); ## hier wird z.B. '73005 GP' aufgeteilt in '73005' und 'GP'
if ($angefragte_plz == $plz)
{
if ($array_mit_orten)
{
foreach ($array_mit_orten as $teil)
{
if ($teil == $ort)
{
$schonda = true;
}
}
if (!$schonda)
{
$array_mit_orten[] = $ort;
}
}
}
$schonda = false;
}

SIeht kompliziert aus aber schau dirs an!


2.

Ich glaub, ich habe mich falsch ausgedrückt ... Dein Hinweis war jetzt darauf gemünzt, wenn ich PLZ und Ort in einer Spalte stehen hab, oder?

Meine Frage sollte aber das zum Inhalt haben:

Anfrage mit "73" wird an die Datenbank mit vorhandenen Einträgen wie z.B. Lokalen, Discotheken gesendet

Wenn ich jetzt im PLZ-Bereich 73 mehrere Discotheken habe, dann listet er mir natürlich bei einer Suchanfrage nach den Orten mit der beginnen PLZ 73 bspw. 5 Mal hintereinander GP (730..), 3 x ES (733..), ... auf (jedes Ergebnis steht dann für eine Discothek).

Ich möchte jetzt aber erreichen, dass er mir mehrfach vorkommende Einträge (Orte)aber nur einmal auflistet, also zusammenfasst.

Der einfach erscheinende Ort wird dann mit einem Link für eine weitere Ergebnisseite verknüpft, wo dann die ausführlichen Einzeleinträge für GP, ES, ... kommen ...

Wirds jetzt klarer?


3.

wenn ich Dich richtig verstanden habe, sollte diese Antwort zutreffen.

SELECT .....FROM table WHERE ... GROUP BY Ort='$ort'

bei den Pünktchen Deinen SELECT einfügen.

mfg

wolfm@n


4.

Die Antwort von Wolfm@an geht zwar in die richtige richtung, bringt aber nicht viel.

Die "Group by" Funktion dient den Aggregatfunktionen (min,max,avg,sum usw.)

Du must SELECT DISTINCT ort FROM table... verwenden.

Dann wird jeder Ort nur einmal ausgelesen

@ wolfm@an: Falls deine LKösung auch funktionieren sollte, sorry. Aber ich glaube es nicht


5.

lasst do mal sein mit SQL.

Ich glaube ich hab dich schon richtig verstanden, sven. Nur mit dem Unterschied dass ich in meinem Beispiel die komplette PLZ verglichen habe. Aber du kannst ja auch nur die ersten beiden Stellen vergleichen, dann funktioniert mei scripot auch:

...
if (substr($angefragte_plz, 0, 2) == substr($plz, 0, 2))
{
...
}
...

So musses eigentlich klappen so wie dus willst. Die Variable $schonda dient ja dazu mit true/false anzugeben ob schon eine Discothek mit demselben Namen eingelesen wurde.


6.

Das Problem ist nicht der vergleich der Postleitzahlen, sondern, dass er nur einmal jeden eingetragenen Ort auf der ersten Seite haben will und über diesen als Link auf eine Unterabfrage gehen will, in welcher dieser Ort aufgeschlüsselt wird.

Da hilft keine Überprüfung der PLZ. Mal davon abzusehen, dass die Gleichheit der ersten beiden Zahlen rein garnichts darüber aussagt ob es die gleiche Stadt ist.

Außerdem ist es so ziemlich blöd erst alle Daten auszulesen und dann per PHP die Anzeige auszusieben, wenn man die Möglichkeit hat, durch SQL nur die gewünschten Daten zu kriegen.

Von wegen Datensicherheit, Transfervolumen, Serverlast, Programmieraufwand und so weiter. Denk mal darüber nach.


7.

Hi, vielen lieben Dank für die zahlreichen Meldungen ...

Die Lösung per "GROUP BY" hat funktioniert ...

trotzdem werde ich die anderen Hinweise mal archivieren und wenn Zeit ist, mir das mal durch den Kopf gehen lassen.

Sven


8.

obwohl @seven29 die Lösung hat, eine kleine Anmerkung.
Viele Probleme können frühzeitig gelöst werden, wenn sich der Programmierer mehr Gedanken um ein ordentliches Datenbankkonzept machen würde. Warum alles aus der Datenbank auslesen, wenn man mit dem "richtigen SELECT" schon die ganze Programmierarbeit erledigt hat? Spart Datenverkehr zwischen Webserver und DB-Server und erst noch die Nerven des Programmierers :-) .
Will nicht sagen, dass Deine Lösung falsch ist, aber man sollte soviel wie möglich MySQL machen lasssen. (Geht schneller) Diese Erfahrung habe ich schon mehrmals gemacht. Gut ich muss sagen, dass ich aus dem DB-Bereich komme und dadruch vielleicht das Ganze mit anderen Augen sehe.

hoffentlich begegnen wir uns hier noch öfters.

wolfm@n


Hier gehts zum Orginal Eintrag "Doppelergebnisse auf ein Ergebnis reduzieren" im Forum
 
phpforum.de | Impressum