Autos mit Eigenschaften

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

  • #16
    Frag einfach die Eigenschaften ab mit Left Join auf das Auto - oder eben Right Join, wie ich bereits geschrieben habe.
    ich glaube

    Kommentar


    • #17
      Ich kann leider die Struktur der Datenbank nicht verändert, deswegen hab ich es jetzt erstmal so gemacht:

      PHP-Code:
      SELECT autoname FROM autotabelle 
      WHERE 
      (SELECT count(eigenschafttabelle.auto_idFROM eigenschafttabelle 
            WHERE autotabelle
      .auto_id eigenschafttabelle.auto_id 
                     
      AND (eigenschaft OR eigenschaft 4GROUP BY auto_id) = 
      Dadurch werden zwar zunächst alle abgefragt die eine der Eigenschaft haben, aber wird dann die den Mutterselect aussortiert. Bei 730.000 Datensätzen find ich es mit 1.0 Sekunden noch recht schnell Ich werd dann mal optimieren....
      nein?

      Kommentar


      • #18
        Ich hab auch nicht behauptet, dass du was umändern sollst...

        PHP-Code:
        SELECT autoname
        FROM eigenschaftstabelle
        LEFT JOIN autotabelle
        USING 
        auto_id )
        WHERE eigenschaft 3
        OR eigenschaft 4
        GROUP BY auto_id 
        Edit: Sorry, dein Problem lag beim AND, glaube ich, oder? Mh, ich würde dann die Tabelle tatsächlich zweimal joinen.
        ich glaube

        Kommentar


        • #19
          Original geschrieben von ministry
          [B]Ich hab auch nicht behauptet, dass du was umändern sollst...
          Sorry, ghostgambler sprach davon.
          nein?

          Kommentar


          • #20
            Original geschrieben von ministry
            Edit: Sorry, dein Problem lag beim AND, glaube ich, oder? Mh, ich würde dann die Tabelle tatsächlich zweimal joinen. [/B]
            Ich müsste ja für jede Eigenschaft eine Tabelle mit 730.000 Einträgen joinen...
            nein?

            Kommentar


            • #21
              Ja, du hast Recht - ich hab das Problem zu spät kapiert. Sorry für den Unsinn. Dann scheint deine Lösung doch recht passabel zu sein.
              ich glaube

              Kommentar


              • #22

                dependend subqueries sind für gewöhnlich der Tod für jeden DB-Server (zumindest in mysql)

                probier mal sowas

                SELECT autoname, COUNT(b.auto_id) anz FROM autotabelle a LEFT JOIN eigenschafttabelle b ON a.auto_id = b.auto_id AND b.eigenschaft IN (3, 4) WHERE anz = 2 GROUP BY a.auto_id

                Wenn das nicht geht

                SELECT autoname, COUNT(b.auto_id) anz FROM autotabelle a LEFT JOIN eigenschafttabelle b ON a.auto_id = b.auto_id AND b.eigenschaft IN (3, 4) GROUP BY a.auto_id HAVING anz = 2

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #23
                  Original geschrieben von ghostgambler
                  dependend subqueries sind für gewöhnlich der Tod für jeden DB-Server (zumindest in mysql)
                  Ich habs jetzt mit Join versucht, allerdings scheint es durch die größere der Eigenschafttabelle ca. 4 mal langsamer als Subquery.

                  b.eigenschaft IN (3, 4)
                  Das hab ich jetzt übernommen und konnte damit auf die Hälfte der Zeit kommen. Zusätzlich hab ich die Abfrage der Zahl mit in den Subquery genommen und außen nur mit IS NOT NULL gegen getestet. Die Performance ist jetzt noch recht überzeugend, mal gucken wie es bei noch mehr Benutzern aussieht.

                  Vielen Dank für eure Hilfe.
                  nein?

                  Kommentar

                  Lädt...
                  X