Mailinglisten-Archive |
René Thiel wrote: > Hallo, > > ich brauche aus 1.000.000 Datensätzen folgendes: > > 1. Verbindungsaufbau (Call X) > 2. Verbindungsdetails (Call X) > 3. Verbindungsabbau (Call X) > > Zwischen Verbindungsaufbau, Verbindungsdetails und > Verbindungsabbau können weitere Verbindungen auf- > und abgebaut werden: > > aufbau(Call 1) > details(Call 1) > aufbau(Call 2) > aufbau(Call 3) > details(Call 3) > details(Call 2) > abbau(Call 3) > abbau(Call 1) > abbau(Call 2) > > Ich brauche also eigentlich für ein "Free" das vorangegangene > "Release" und zu dem wieder das vorangegangene "Alloc", > WENN NICHT nach dem "Alloc" noch ein "Free" zu finden ist. > > Ich habe das so versucht: > > SELECT * FROM `Tabelle` > WHERE `Typ` = 'Free' > ORDER BY `ID` > > SELECT * FROM `Tabelle` > WHERE `Call` = '".$Free_row['Call']."' > AND `Typ` = 'Release' > AND `ID` < '".$Free_row['ID']."' > ORDER BY `ID` DESC > LIMIT 1 > > SELECT * > FROM `Tabelle` > WHERE `Call` = '".$Free_row['Call']."' > AND `Typ` = 'Alloc' > AND `ID` < '".$Release_row['ID']."' > ORDER BY `ID` DESC > LIMIT 1 " > > Das Ganze gab mit Abbruch bei 500 gefundenen > Verbindungen: 3,734 sec - eindeutig zu viel. das das zu lange dauert glaube ich gerne, du machst für jedes ERgebnis aus der ersten Abfrage zwei weitere Abfragen ... puh probiere es doch mal mit JOINS und Indizes auf (`Typ`, `ID`) und (`Call`, `Typ`, `ID`) (`ID`) ja sowieso ... SELECT `free`.`ID` AS `free_id`, `release`.`ID` AS `release_id`, `alloc`.`ID` AS `alloc_id`, [was du halt sonst noch so für Felder brauchst] FROM `Tabelle` AS `free` LEFT JOIN `Tabelle` AS `release` ON `free`.`call` = `release`.`call` AND `Typ` = 'Release' AND `ID` = ( SELECT `ID` FROM `Tabelle` AS `release_id` WHERE `ID` < `free`.`ID` ORDER BY `ID` DESC) LEFT JOIN `Tabelle` AS `alloc` ON `free`.`call` = `alloc`.`Call` AND `Typ` = 'Alloc' AND `ID` = ( SELECT `ID` FROM `Tabelle` AS `release_id` WHERE `ID` < `free`.`ID` ORDER BY `ID` DESC) WHERE `free`.`Typ` = 'Free' ORDER BY `ID` ist aber ungestest, aber so in der Art würde ich es wohl mal probieren ... -- Sebastian Mendel www.sebastianmendel.de
php::bar PHP Wiki - Listenarchive