BETWEEN will mal wieder nicht!?

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

  • BETWEEN will mal wieder nicht!?

    Ahoii! Und zwar hab ich folgendes Problem:

    Ich selecte aus Schuljahren, die in Semester geteilt sind (unix timestamps als INT) mehrere joins...

    site_shedule sind eingetragene Aktivitäten (auch als timestamp)

    site_pages sind Beiträge die mit Aktivitäten verlinkt werden können

    site_pages_links ist ne Hilfstabelle die die Verlinkungen enthält

    Ich hab mal ne Graphik angehängt, damit ihr nen Überblick bekommt...

    Das ist mein Query:
    PHP-Code:
          $shsql "SELECT site_pages.id, site_pages.headline, site_shedule.shed_dateA, site_shedule.shed_dateB, site_shedule.shed_dateDIV
            FROM site_pages, site_pages_links, site_shedule
            WHERE site_shedule.shed_dateA BETWEEN "
    .$jear['start']." AND ".$jear['sstart']."
             AND site_pages_links.type=1
             AND site_pages_links.page_id = site_pages.id
             ORDER BY site_shedule.shed_dateA ASC"

    Sorry wegen der PHP-Variablen! Rauskommen soll im Endefekt ein HTML-Select indem nach OPTGROUP Jahre nach Semestern geteilt sind und pro Semester die Einzelnen headlines mit Datum davor...
    Bsp.: 11.11.2011: Ich bin die headline einer site_pages

    Die OPTGROUPs waren ja kein Problem, aber der gepostete Query dauert 10sec. und liefert irrsinnige Ergebnisse! Bei Bedarf poste ich auch gern den PHP Code!
    Angehängte Dateien
    WHILE (!$asleep) { $sheep++; }

  • #2
    Re: BETWEEN will mal wieder nicht!?

    Original geschrieben von nichtsooft


    Sorry wegen der PHP-Variablen!
    Sorry, du machst jetzt brav echo $shsql; und poste den Output hierein.

    Kommentar


    • #3
      gerne asp!

      Ich dachte bloß PHP wär hier viell. unangebracht! =)

      Also hier mal mit "LIMIT 1" und print_r();

      Array
      (
      [id] => 208
      [headline] => Nestlé Lauf - Eisenstadt
      [shed_dateA] => 1220220000
      [shed_dateB] => 0
      [shed_dateDIV] => div
      )

      Edit:

      Der Datenfalsch ist falsch! Eigentlich sollte hier ein ganz anderer (id = 287) ausgegeben werden!
      WHILE (!$asleep) { $sheep++; }

      Kommentar


      • #4
        Uns interessiert nicht das Resultat, sondern der Query, der auch an MySQL raus geht.

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

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

        Kommentar


        • #5
          *lol* Manchmal lese ich was ich lesen will...

          Also beim echo kommt folgedes raus:

          SELECT site_pages.id, site_pages.headline, site_shedule.shed_dateA, site_shedule.shed_dateB, site_shedule.shed_dateDIV
          FROM site_pages, site_pages_links, site_shedule
          WHERE site_shedule.shed_dateA BETWEEN 1220220000 AND 1233961200
          AND site_pages_links.type=1
          AND site_pages_links.page_id = site_pages.id
          ORDER BY site_shedule.shed_dateA ASC
          WHILE (!$asleep) { $sheep++; }

          Kommentar


          • #6
            Ich würde zunächst mal mit einem LEFT/RIGHT/INNER JOIN optimieren, CROSS JOIN ist zu teuer . Ich würde so gestalten:

            PHP-Code:
            select ... from site_pages a inner join site_pages_links b
               on a
            .id=b.pages_id inner join site_shedule c
                  on b
            .link=c.shed_id 
                      where 
            (c.shed_dateA BETWEEN 1220220000 AND 1233961200)
                          and 
            b.type=1
            order by 
            ... 

            Kommentar


            • #7
              BIG THX! Jetzt läuft's A richtig und B 30x schneller! =)
              Zuletzt geändert von nichtsooft; 28.11.2008, 04:36.
              WHILE (!$asleep) { $sheep++; }

              Kommentar

              Lädt...
              X