Ankündigung

Einklappen
Keine Ankündigung bisher.

frage zu performance, bzw. serverbelastung bei abfrage...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • frage zu performance, bzw. serverbelastung bei abfrage...

    ich habe auf unserer modellbauseite ein script geschrieben indem alle modelle angezeigt werden.

    über ein dropdownfeld können dann einzelne modellsparten angezeigt werden: http://www.msgu.at/index.php?cont=models.php

    ich wollte hier noch einbauen dass immer danebensteht wieviele modelle es für das jeweilige dropdownfeld gibt. sprich ich muss für jedes feld eine abfrage machen. ist das zu stark datenbank belastend oder ist das in DIESEM umfang egal. müsste dann ja wie gesagt für jedes feld eine abfrage machen. und das bei jedem seitenaufruf. sprich in unserem falle hier 6 hintereinander.

    was sagt ihr dazu?

  • Promaetheus
    antwortet
    @bruchpilot: hatte die sql anweisung nur per echo ausgegeben und hier her kopiert da ich definitionen verwende.

    sieht natürlich normalerweise so aus:
    Code:
    $sql = 'SELECT t1.mod_kind_id,t1.mod_kind_desc,COUNT(t2.mod_kind) AS counts 
            FROM '.TABLE_MODELS_KIND.' AS t1 
            LEFT JOIN '.TABLE_MODELS.' AS t2 
            ON t2.mod_kind = t1.mod_kind_id 
            GROUP BY t1.mod_kind_id';
    mit diesem code funktioniert es jetzt. hab mir das left/right join angesehen. gibt ein fantastisches tutorial hierzu: http://www.tbee.de/mysql/t3_tabellen..._joinstart.php

    jetzt passt es. danke nochmal @all.

    ausgabe:
    1: Tragfl?che, 49
    2: Helikopter, 3
    3: Auto, 0
    4: Sonstiges, 1
    5: Boot, 1

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Dafür lies Dir mal die Beschreibung von RIGHT JOIN/LEFT JOIN durch.
    Und bitte auch sql Anweisungen strukturiert aufschreiben. Bandwurmeinzeilern sind furchtbar unübersichtlich.


    Ich bleibe jetzt bei der ersten Beschreibung
    meine datenbank sieht so aus:

    tabelle_sparten:
    - sparten_id
    - sparten_name

    tabelle_modelle:
    - modell_id
    - sparten_id
    - modell_name
    Code:
    SELECT
      s.sparten_name,s.sparten_id,Count(m.modell_id)
    FROM
      tabelle_modelle as m
    RIGHT JOIN
      tabelle_sparten as s
    ON
      s.sparten_id=m.sparten_id
    GROUP BY
      sparten_id

    Einen Kommentar schreiben:


  • Promaetheus
    antwortet
    ok. hab mich jetzt in das thema eingelesen und ein gutes tutorial gefunden: http://www.tu-chemnitz.de/docs/mysql/mysql-169.html

    mir ist jetzt auch klar wozu die JOIN / GROUP abfrage... nämlich damit es schneller geht und weniger ressourcen braucht.

    ABER: wenn kein modell gespeichert ist, wird nicht 0 ausgegeben, sondern einfach NIX. hab jetzt schon gesehen dass mit COUNT(*) eigentlich auch die empty ausgegeben werden müssten. dies ist aber nicht der fall:

    Code:
     SELECT t1.mod_kind_id,t1.mod_kind_desc,COUNT(*) AS counts FROM mod_kind AS t1 JOIN mb_models AS t2 ON t1.mod_kind_id = t2.mod_kind GROUP BY t1.mod_kind_id
    gibt folgendes ergebnis aus:
    1: Tragfl?che, 49
    2: Helikopter, 3
    4: Sonstiges, 1
    5: Boot, 1
    bei 3: Auto jedoch nichts, da hier noch keine daten gespeichert sind. hier mal die tabellenstruktur:

    tabelle mod_kind:
    spalte mod_kind_id
    spalte mod_kind_desc

    tabelle mb_models:
    spalte mb_mod_id
    spalte mb_mod_kind

    ist eigentlich eh logisch dass er da nix findet wenn kein model mit der mod_kind_id 3 gespeichert ist. aber wie könnte ich es hinbekommen dass diese dort auch angezeigt wird mit dem wert 0? mit count(*) funktioniert es mal nicht.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Code:
    SELECT
      s.sparten_name,m.sparten_id,Count(m.modell_id)
    FROM
      tabelle_modelle as m
    JOIN
      tabelle_sparten as s
    ON
      s.sparten_id=m.sparten_id
    GROUP BY
      sparten_id

    Einen Kommentar schreiben:


  • Promaetheus
    antwortet
    oje. mein hauptmanko. mysql. gibts irgendwo eine gute deutsche anleitung zu dem thema? hab mich schonmal mit der sache auseinandergesetzt, aber leider nicht durchgeblickt.

    mache kombinierte abfragen jetzt immer so:

    SELECT t1.spalte1, t2.spalte1, t2.spalte2 FROM tabelle1 AS t1, tabelle2 AS t2 WHERE t2.spalte2 = t1.spalte1

    das nützt mir hier aber wohl nix oder?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Reine sql Frage, hat in der Form nichts mit php zu tun.
    Das geht mit Count(), GROUP BY und JOIN.
    Lassen wir erstmal das JOIN weg und beschäftigen uns mit tabelle_modelle.
    Wie kannst Du da Count() und GROUP BY anwenden, um in einem Rutsch für alle sparten_id die jeweilige MEnge an Elementen zu ermitteln?

    Einen Kommentar schreiben:


  • Promaetheus
    antwortet
    meine datenbank sieht so aus:

    tabelle_sparten:
    - sparten_id
    - sparten_name

    tabelle_modelle:
    - modell_id
    - sparten_id
    - modell_name

    meine abfrage der spalten für das dropdown lautet:

    SELECT FROM tabelle_sparten ...

    dann mit while alle anzeigen.

    unten dann die abfrage der modelle:

    SELECT FROM tabelle_modelle ...

    wenn eine sparte ausgewählt wurde wird die sparten id übergeben und die mysql abfrage lautet:

    SELECT FROM tabelle_modelle ... WHERE sparten_id = $_GET['sparten_id']

    also müsste ich ja oben in der while schleife schon immer eine neue sql abfrage machen mit echo mysql_num_rows($query);

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    Stehen die unterschiedlichen Sparten nicht in einer Tabelle, so dass du mit COUNT() und GROUP BY arbeiten kannst?

    Einen Kommentar schreiben:

Lädt...
X