Anzahl Einträge in Klammer, ala Ebay und co.



  • Hallo

    Ich habe eine Sitemap mit Links zu bestimmten Seiten. Diese Links repräsentieren Kategorien, ähnlich wie das von Ebay (Computer (5203), Bildschirme (21456), Laufwerke (2332), etc...). Jetzt mache ich das so, dass ich in einer Schleife (php) jeweils ein Query losjage, das mir mit COUNT(*) die Anzahl Rows gibt, um den Hyperlink mit diesem Wert zu füttern. Also das Query sieht wie folgt aus:

    SELECT COUNT(*) FROM products AS p JOIN manufacturers AS m ON m.manufacturer_id = p.manufacturer_id JOIN manufacturers_settings AS ms ON ms.manufacturer_id = p.manufacturer_id WHERE ms.active = '1' AND p.product_category_id = 'EINE_NUMMER' AND p.active = '1'
    

    Diese anfrage wird nun für jede Kategorie ausgeführt, also sind das über 100 Queries! Bis ich die Links mit den Zahlen darstellen kann, dauert das ganze eta 60 Sekunden!! Meine Frage nun: Macht man sowas überhaupt "Live" (also immer dann wenn es angefordert wird) und wenn ja, wie kann ich die Performance massiv verbessern? Vielleicht muss ich weitere Indexes anlegen aber blos wo und welche? product_category_id macht keinen sinn. Das kommt ja maximal 100 mal vor, von 10.000 einträgen in products.

    Bin ratlos...



  • du holst dir ein recordset mit den 100 Dingern und liest dann das Array aus, welches du gefüllt hast. Dann quälst du schonmla nicht den Server und geht auch bissl flotter. Wenn allerdings deine DB überfüllt ist dauert es eben seine zeit auser du setzt wie schon erwähnt ind. ein.



  • @sweelala:
    Wenn du Datenbank-Abfragen sinnvoll optimieren können willst, musst du verstehen wie Datenbanken intern arbeiten. Sonst wird das nix.

    Also, geh hin, und lerne wie Datenbanken intern arbeiten.

    product_category_id macht keinen sinn. Das kommt ja maximal 100 mal vor, von 10.000 einträgen in products.

    Wennst glaubst...



  • PRIEST: Das klingt interessant, an sowas habe ich auch schon gedacht. Aber wir realisiert man sowas?



  • Ah ich habs. GROUP BY ist das Zauberwort.



  • Ein COUNT(*),Produkt mit GROUP BY Produkt


Anmelden zum Antworten