Mailinglisten-Archive |
Hi, folgendes wurden hier schon mal vor einiger Zeit besprochen, aber ich fass es trotzdem nochmal kurz zusammen, vielleicht gibt ja inzwischend bessere ideen. Situation (vorsicht monospace einschalten ;) ): artikeltbl AtoB bildtbl ------------- ------------- ------------- | artnr |---> | artref | .-> | bid | ------------- ------------- | ------------- |bezeichnung| | bildref | -´ | file | ------------- ------------- ------------- | Preis | | type | ------------- ------------- Wie hier vereinfacht dargestellt, gibt es Artikel, zu dennen es jeweils 1/n Bilder geben kann, wobei ein Bild nicht zwingen zu einem Artikel gehoert.(Also ne stinknormale n/m - Relation) Gewuenscht ist jetzt ueber die middleware(in diesem fall PHP) eine Artikelliste anzuzeigen, in der gekennzeichnet ist, ob es zu diesem Artikel mindestens ein Bild gibt. Etwa so: --------------------------------------------------- bezeichnung Preis hasbild | --------------------------------------------------- apfel 0,70 Eur | gurke 0,50 Eur x | --------------------------------------------------- Die Liste soll sich nach allen Felder sortieren lassen. Das Query, was das ermittelt sieht also etwa so aus: SELECT a.*,if(ab.bildref is NULL,0,1) AS hasbild from Artikel LEFT JOIN AtoB ab ON a.artnr=ab.artref GROUP BY a.artnr ORDER BY blabla LIMIT $start,$perpage Problem ist, das durch das Group by das query extrem lahm wird (ca. 5-8 sec. bei 16000 artikel und 4000 bildern). Ziel ist das ganze zu beschleunigen. Es gab da auch schon ideen eurerseits: z.B. Das Flag hasbild ueber die middelware mit nem 2ten query zu erzeugen -> faellt aus, da dann keine sortierung mehr moeglich ist. Die einzige Loesung die mir dazu einfaellt ist, die artikeltabelle um ein feld zu erweitern (hasbild) und dieses beim Winpflegen des artikels zu setzen. Das verstoesst zwar ein wenig gegen die normalform ist aber zu Gunsten der Performance in jedenfall vertrettbar. Bevor ich das jetzt so implementiere wollte ich nochmal kurz nachfragen, ob jemand vielleicht noch ne bessere Idee hat. Entschuldigt die ausfuehrliche Darstellung, aber ich wollt sicher gehen, dass es keine missverstaendnisse gibt. Gruss, Niko -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive