Hallo zusammen,
ich brauche mal einen einen MYSQL Spezialisten.
Das Problem ist:
Ich habe 1 Tabelle mit folgendem Inhalt
ORT | Name
===========
FFM | Name1
FFM | Name2
FFM | Name3
FFM | Name4
FFM | Name5
FFM | Name6
OF | Name7
OF | Name8
OF |USW.
OF |
DA |Name1001
DA |Name1002
Wie kann ich das folgende Ergebnis mit einer mySQL-Query umsetzten
ORT | Name
===========
FFM | Name1
FFM | Name2
OF | Name7
OF | Name8
DA | Name999
DA | Name1000
Also immer nur 2 Datensätze für eine Ort ausgeben mit unterschiedlichem Name.
Hat jemand eine Idee?
Danke
Berni
<?php
$select = "SELECT DISTINCT(ort) AS ort FROM tabelle";
$berni = mysql_query($select);
while ($hand = mysql_fetch_assoc($berni)) {
$innerselect = "SELECT ort, name FROM tabelle where ort = '$hand[ort]' LIMIT 2";
$innerberni = mysql_query($innerselect);
while ($innerhand = mysql_fetch_assoc($innerberni)) {
print "$innerhand[ort] | $innerhand[name]<br>\n";
}
mysql_free_result($innerberni);
}
mysql_free_result($berni);
?>
MoRtAlAn
08-08-2002, 19:17
mh... bekommst du das auch in einem SQL-Statement hin ??
gruss
Nein - Ich nicht - aber za was?
Du? :D
thanks Hand,
deine Lösung erzeugt zu viele DB-Zugriffe.
Ich brauche eine SQL-Anweisung. Ich dachte da an Having und Group by.
Gruß
Berni
Und wenns gar nicht geht anders?
Was dann? Das mit dem Limit 2 ist schon eine Herausforderung - ich behaupte einfach ganz frech, das geht nicht anders.
Bin mal gespannt auf eine Lösung ....
Mit einem SELECT ginge es auch, wenn man danach ensprechend die Daten nach Ort-Gruppenwechseln verarbeitet.
SELECT ort, name FROM tabelle ORDER BY ort, name
Aber wahrscheinlich spricht auch die Datenmenge (Timeout) dagegen.
Was wäre wenn man die Anforderung von zwei Records je Ort auf einen Record zurückschraubte?
Mit dem Gruppenwechsel habe ich mir auch schon überlegt.
Ich glaube aber auch das es mit mysql nicht funktioniert.
Naja Dann müssen halt ein paar SQL-Anweisungen her :)
thank
berni
MelloPie
08-08-2002, 23:00
Ich denke das geht nicht, aber was geht ist doch in der while ($result) Schleife einfach immer wenn der Ort gleich ist nur die ersten beiden datensätze auszugeben.
etwa so:
$anz_ort = 0;
$result = mysql_query("SELECT * FROM tbl");
while ($zeile = mysql_fetch_row($result)) {
if($ort != $zeile[0]) $anz_ort = 0;
$ort = $zeile[0];
if($anz_ort < 2) echo $zeile[0].":".$zeile[1]."<br>";
$anz_ort++;
}
Dann haste eine Abfrage und gibst nur aus was Du willst
jo, und was mache ich bei 150000 Datensätze?
Das würde ziemlich lang dauern..
Danke
Berni
MelloPie
09-08-2002, 15:34
Hm... da magste Recht haben, wie schauts aus mit zwischenspeichern in einer temp tabelle mit
SELECT INTO tmp_tbl blabla
Das ganze zweimal machen mit LIMIT 0,1 und LIMIT 1,1 bei gleichem SQL Statement und der angesprochenen GROUP BY ort Gruppierung,
dann das Ergebnis aus der tmp_tbl mit ORDER BY ort lesen...