Query schießt den Rechner ab

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

  • Query schießt den Rechner ab

    Guten Tag,

    folgender Query lässt den Speicher des Rechners überlaufen. Nach 20 Sekunden geht nix mehr und man kann neu starten.

    PHP-Code:
    /* retrieve latest products */
    $res =& $db->query("
    SELECT p.name, pic.picture, pi.d_produktbeschreibung
    FROM products AS p, productinfo AS pi, lnk_product_pic AS lpp, picture AS pic
    WHERE (p.since = '"
    .date('Y')."') OR (p.since = '".(date('Y')-1)."')
    AND (pi.pid = p.pid)
    AND (p.pid = lpp.pid)
    AND (lpp.id_picture = pic.id_pic)
    ORDER BY p.since DESC"
    ); 
    Ist da ein logischer Fehler drin ?
    Pickel ? Übergewicht ? Depressionen ?
    Brot, Kartoffeln und Milch sind Gift!
    http://www.paleofood.de

  • #2
    Re: Query schießt den Rechner ab

    Original geschrieben von antman
    Ist da ein logischer Fehler drin ?
    ja. weil du 4 tabellen ohne entsprechenden (INNER|LEFT|RIGHT) JOIN verbindest.

    (my)sql bildet das kreuzprodukt ALLER tabellen. und das dauert nunmal sehr lange, wenn du viele daten pro tabelle hast.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Oh Mann,

      bevor ich die Seite neu lade und den Rechner wieder neu starten darf frage ich besser mal nach. Wie sieht es hiermit aus?

      PHP-Code:
      /* retrieve latest products */
      $res =& $db->query("

      SELECT p.name, pic.picture, pi.d_produktbeschreibung
      FROM products AS p, productinfo AS pi, lnk_product_pic AS lpp, picture AS pic
      LEFT JOIN picture AS pic ON AND (p.pid = lpp.pid)
      LEFT JOIN picture AS pic ON AND (lpp.id_picture = pic.id_pic)
      WHERE (p.since = '"
      .date('Y')."') OR (p.since = '".(date('Y')-1)."')
      AND (p.pid = pi.pid)
      ORDER BY p.since DESC"
      ); 
      Pickel ? Übergewicht ? Depressionen ?
      Brot, Kartoffeln und Milch sind Gift!
      http://www.paleofood.de

      Kommentar


      • #4
        mach nach dem ON das AND weg

        edit: lies dir mal den Sticky Thread durch



        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          PHP-Code:
          /* retrieve latest products */
          $res =& $db->query("

          SELECT p.name, pic.picture, pi.d_produktbeschreibung
          FROM products AS p, productinfo AS pi, lnk_product_pic AS lpp, picture AS pic
          LEFT JOIN picture AS pic ON (p.pid = lpp.pid)
          LEFT JOIN picture AS pic ON (lpp.id_picture = pic.id_pic)
          WHERE (p.since = '"
          .date('Y')."') OR (p.since = '".(date('Y')-1)."')
          AND (p.pid = pi.pid)
          ORDER BY p.since DESC"
          ); 
          Die AND hatte ich übersehen. Kenne die Syntax.
          Besser?
          Pickel ? Übergewicht ? Depressionen ?
          Brot, Kartoffeln und Milch sind Gift!
          http://www.paleofood.de

          Kommentar


          • #6
            Aber warum brauch ich überhaupt das JOIN?
            Das JOIN brauche ich doch nur wenn ich aus einer anderen Tabelle zusätzliche Infos holen will, die aber für nicht alle der gesuchten Datensätze ein Äquivalent haben, oder ?

            Also, z. B. wenn es nicht zu jeden Produkt ein Bild gibt, aber man die anderen Daten trotzdem braucht.
            Pickel ? Übergewicht ? Depressionen ?
            Brot, Kartoffeln und Milch sind Gift!
            http://www.paleofood.de

            Kommentar


            • #7
              hmm,

              geht noch besser, imho. bevor ich quatsch poste, frag ich lieber mal nach nem kleinen dump ... dann kann ich ma teschten ...

              aber: mein schlaues buch sagt, daß bei einfacher aufzählung der tabellen mysql(4) sich die effektivste methode raussucht ...
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Was für ein Dump?
                Pickel ? Übergewicht ? Depressionen ?
                Brot, Kartoffeln und Milch sind Gift!
                http://www.paleofood.de

                Kommentar


                • #9
                  Da steckt immer noch ein Fehler drin:

                  PHP-Code:
                  /* retrieve latest products */
                  $res =& $db->query("SELECT p.name, pic.picture, pi.d_produktbeschreibung
                  FROM products AS p, productinfo AS pi
                   LEFT JOIN lnk_product_pic AS lpp ON (p.pid = lpp.pid)
                  LEFT JOIN picture AS pic ON (lpp.id_picture = pic.id_pic)
                  WHERE (p.since = '"
                  .date('Y')."') OR (p.since = '".(date('Y')-1)."')
                  AND (p.pid = pi.pid)
                  ORDER BY p.since DESC"
                  ); 
                  Aber wo ?
                  Zuletzt geändert von antman; 19.07.2004, 13:16.
                  Pickel ? Übergewicht ? Depressionen ?
                  Brot, Kartoffeln und Milch sind Gift!
                  http://www.paleofood.de

                  Kommentar


                  • #10
                    hahahahahahahaaaaaaaaaa

                    Jetzt klappt es halbwegs.

                    Allerdings bekomme ich nun folgende Ausgabe in phpmyadmin:
                    (45 Seiten Datensätze )

                    name | picture | d_produktbeschreibung

                    name1 |bild1| beschreibung1
                    name1|bild2|beschreibung1
                    etc

                    Ich brauche aber nur das erste Bild für ein Produkt.
                    Und schon weiß ich wieder nicht weiter.

                    Wer könnte mir helfen. Danke
                    Zuletzt geändert von antman; 19.07.2004, 13:23.
                    Pickel ? Übergewicht ? Depressionen ?
                    Brot, Kartoffeln und Milch sind Gift!
                    http://www.paleofood.de

                    Kommentar


                    • #11
                      tja,
                      OffTopic:
                      ohne tabellenauszug kann ich, wie gesagt, nichts produktives dazu sagen ...

                      außer vielleicht, daß die zwote bedingung im WHERE noch ins ON könnte ...

                      edit: ok. dann mach nen DISTINCT + ORDER ... naja, wie gesagt ...
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar


                      • #12
                        Ach du wolltest die Tabellenstruktur haben ?

                        Tabelle products
                        ----------------------------------
                        pid | category | name |since


                        Tabelle productinfo
                        ----------------------------------
                        lang | pid | d_produktbeschreibung


                        Tabelle picture
                        ----------------------------------
                        id_pic | picture


                        Tabelle lnk_product_pic
                        ----------------------------------
                        pid |id_picture
                        Pickel ? Übergewicht ? Depressionen ?
                        Brot, Kartoffeln und Milch sind Gift!
                        http://www.paleofood.de

                        Kommentar


                        • #13
                          nö,

                          danke trotzdem. ich hab explizit nachm dump (phpmyadmin > export) gefragt, damit ich nicht selbst tippen muß. egal. du schaffst es!
                          Die Zeit hat ihre Kinder längst gefressen

                          Kommentar


                          • #14
                            probier mal

                            select p1.name, p3.picture, p4.d_produktbeschreibung
                            from
                            (products p1 inner join lnk_product_pic p2 on p1.pid=p2.pid
                            inner join picture p3 on p3.id_pic=p2.id_picture)
                            inner join productinfo p4 on p1.pid=p4.pid
                            where p1.since between year(curdate())-1 and year(curdate())

                            btw: unter Tabellendump versteht man die SQL-Commands zur Erzeugung
                            der Tabelle samt Daten, also sowas in der Kombination: create table ...,
                            insert into ..., wenn du sowas liefern kannst, dann können andere in ihre
                            eigene DB importieren und für dich rum probieren.

                            Kommentar


                            • #15
                              Hallo,

                              Habe es mit print_r() mal ausgegeben:
                              Der liefert zig mal das gleiche.

                              1 datensatz:
                              - Produkt1
                              - Bild 1
                              - Beschreibung 1


                              2 datensatz:
                              - Produkt1
                              - Bild 1
                              - Beschreibung 1

                              3 datensatz:
                              - Produkt1
                              - Bild 1
                              - Beschreibung 1

                              4 datensatz:
                              - Produkt1
                              - Bild 2
                              - Beschreibung 1

                              5 datensatz:
                              - Produkt1
                              - Bild 2
                              - Beschreibung 1

                              6 datensatz:
                              - Produkt1
                              - Bild 2
                              - Beschreibung 1

                              7 datensatz:
                              - Produkt1
                              - Bild 2
                              - Beschreibung 1

                              8 datensatz:
                              - Produkt1
                              - Bild 2
                              - Beschreibung 1


                              Warum nur?

                              Das mit dem Dump kann ich nicht machen, da in den Tabellen persönliche Daten drin sind.
                              Zuletzt geändert von antman; 21.07.2004, 10:44.
                              Pickel ? Übergewicht ? Depressionen ?
                              Brot, Kartoffeln und Milch sind Gift!
                              http://www.paleofood.de

                              Kommentar

                              Lädt...
                              X