Mailinglisten-Archive |
Hi Sebastian, Hi Michael Die untere Anfrage an sich ist vom Ansatz richtig, falls LIMIT im UNION-Part funktioniert, hat aber ein paar Nachteile. So gehst Sebastian implizit davon aus, dass LIMIT 5 die Reihenfolge des PRIMARY KEYs bzw. hier sogar des nicht PRIMARY KEY 'date' beruechsichtigt. Dem muss aber nicht so sein, wobei man dies mit ORDER BY schon hinbekommen kann. Das andere Problem liegt im UNION selbst, welcher nur in einer aeusseren Abfrage vorkommen kann, d.h. die Anfrage selbst kann nicht wieder direkt als nested-Anfrage benutzt werden, was in Hinblick auf den kommenden 4.1 bei der Entwicklung schon mit beruecksichtigt werden sollte. Andererseits ist bei deiner Anfrage schon anzumerken, dass sie um einiges performanter sein duerfte als die meinige, da die Duplikateleminierung im UNION bei nur max 11 Ergebnissen vernachlaessigbar ist und du keine nested-Anfragen mit Verknuepfung der umgebenden geschrieben hast, wodurch deine Anfragen alle nur einmal ausgefuehrt werden muessen. tschau Sebastian Mendel schrieb: > Michael Schoenboeck wrote: > > >>Originalabfrage: >>select * from `pix` where id='0815' and usr_name='maxi'"; >> >>Gibt mir einen datensatz zurück, was auch ok so ist, da ID der >>primerschlüssel ist >> >>Jetzt möchte ich aber auch 5 datensätze passend zu usr_name VOR diesem >>datensatz und 5 nach diesem datensatz, sortiert nach datum. >> >>Das in einer abfrage, wo von mir aus gesamt 10 (11) datensätze geliefert >>werden... >> >>Hm, hat da wer ideen? > > > mit UNION ab MySQL 4.0.0: > > > SELECT `pix`.* > FROM `pix` > WHERE `pix`.`id` = '0815' > AND `pix`.`usr_name` = 'maxi' > > UNION > > SELECT `pix_result`.* > FROM `pix` > LEFT JOIN `pix` AS `pix_5_before` > ON `pix`.`usr_name` = `pix_5_before`.`usr_name` > WHERE `pix`.`id` = '0815' > AND `pix`.`usr_name` = 'maxi' > AND `pix_5_before`.`date` < `pix`.`date` > LIMIT 5 > > UNION > > SELECT `pix_5_after`.* > FROM `pix` > LEFT JOIN `pix` AS `pix_5_after` > ON `pix`.`usr_name` = `pix_5_after`.`usr_name` > WHERE `pix`.`id` = '0815' > AND `pix`.`usr_name` = 'maxi' > AND `pix_5_after`.`date` > `pix`.`date` > LIMIT 5 > > > so in der art ... irgendwie, viel spaß beim rumprobieren! > > > -- Software-Tomography - we make the invisible visible! Jan Kuehl Software-Tomography GmbH Karlstr.7 D-03044 Cottbus e-Mail: jan.kuehl at software-tomography.com http://www.software-tomography.com Phone: +49 (0355) 4945077 ----------------------------
php::bar PHP Wiki - Listenarchive