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?
    mfg Alex

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

    Kommentar


    • #3
      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);
      mfg Alex

      Kommentar


      • #4
        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?

        Kommentar


        • #5
          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?
          mfg Alex

          Kommentar


          • #6
            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

            Kommentar


            • #7
              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.
              mfg Alex

              Kommentar


              • #8
                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

                Kommentar


                • #9
                  @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
                  mfg Alex

                  Kommentar

                  Lädt...
                  X