Anfänger braucht Hilfe bei LIMIT Funktion
Barcode
- datenbank
Hallo,
ich bin Besitzer eines Onlineshops und habe Probleme mit extrem langen Ladezeiten. Wenn ich eine Warengruppe öffne (z.B. Hardware), sollen die Produkte angezeigt werden die in allen Untergruppen vorhanden sind. Das klappt soweit super. Problem ist nur, dass das 13.000 Produkte ist, wovon nur 10 pro Seite angezeigt werden.
Nun werden anscheinend alle 13.000 Produkte abgefragt, obwohl ja zunächst nur die 10 der ersten Seite benötigt werden. Ein Freund meinte nun, dass ich das mit der LIMIT Funktion eingrenzen könnte. Der Code sieht wie folgt aus:
$listing_sql = "select distinct " . $select_column_list . " p.products_image, pd.products_name, p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and " . $cat_Search . "";
Ich habe schon hin und her gebastelt, weiß aber nicht wo ich den Code (Limit 10!?) einsetzen muss. Bin wirklich ein Anfänger was das angeht, also bitte versucht es verständlich zu formulieren.
Ich freu mich auf eure Antworten.
Danke und MFG
Barcode
Hi,
Ich habe schon hin und her gebastelt, weiß aber nicht wo ich den Code (Limit 10!?) einsetzen muss. Bin wirklich ein Anfänger was das angeht, also bitte versucht es verständlich zu formulieren.
Dein Problem ist ein absolutes Standard-Problem.
Suchbegriffe wie „Blätterfunktion” o.ä. sollten dir weiterhelfen.
MfG ChrisB
Hallo,
danke für die Antwort, aber die Blätterfunktion funktioniert ja. Nur werden alle Produkte ausgelesen anstatt der nur benötigten 10 pro Seite.
Oder hab ich dich jetzt missverstanden?
Danke und MFG
Barcode
Hi,
danke für die Antwort, aber die Blätterfunktion funktioniert ja. Nur werden alle Produkte ausgelesen anstatt der nur benötigten 10 pro Seite.
Damit hast du also entdeckt, dass "funktioniert" und "sinnvoll" nicht zusammenhängen.
Oder hab ich dich jetzt missverstanden?
Ja.
Die Aufgabe ist, ich beginne mich zu wiederholen, eine absolute Standardaufgabe - zu deren sinnvoller Umsetzung sich haufenweise Erklärungen und Tutorials finden lassen sollten.
MfG ChrisB
Ok, ich hab mir jetzt mal zwei Anleitungen zur Blätterfunktion mit LIMIT angeguckt. Ich habe es genauso gemacht. Habe auch gesehen, dass mein Code bereits die LIMIT Funktion beinhaltet.
Nur sind die Ladezeiten von Warengruppen mit 10.000 Produkten extrem lang und die Ladezeiten von Warengruppen mit 100 Artikeln recht fix.
Sollte das nicht egal sein, wenn ohnehin nur 10 Produkte abgefragt werden?
Hi,
Nur sind die Ladezeiten von Warengruppen mit 10.000 Produkten extrem lang und die Ladezeiten von Warengruppen mit 100 Artikeln recht fix.
Sollte das nicht egal sein, wenn ohnehin nur 10 Produkte abgefragt werden?
Nein, das kann man so pauschal ganz und gar nicht sagen.
Egal wie viele von den Datensätzen du dir letztendlich von der Datenbank zurückgeben lässt - eine Sortierung muss auf jeden Fall stattfinden, und die muss den gesamten Datenbestand betrachten.
Sinnvoll gesetzte Indexe können dabei natürlich einiges „bringen”.
Ob und ggf. wie vorhandene solche genutzt werden, kann man in Erfahrung bringen, in dem man ein EXPLAIN vor das Statement setzt, also "EXPLAIN SELECT ...", und sich dann die Rückgabe anschaut.
Das führt dann aber schon in Bereiche, in denen man sich erst mal ein bisschen mit den Grundlagen beschäftigen muss, bevor man damit was anfangen kann.
MfG ChrisB
hi,
Ich habe schon hin und her gebastelt, weiß aber nicht wo ich den Code (Limit 10!?) einsetzen muss.
Limit kommt immer hintendran an die Query, auch bei Joins, Beispiel:
SELECT talk.ts as ts, talker.nick as nick, talk.msg as msg FROM talk
LEFT OUTER JOIN talker ON talker.sessionid = talk.nickid
ORDER BY talk.ts DESC LIMIT 20
Viele Grüße,
Horst Weberknecht