ORDER BY bei Mehrfachabfrage

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

  • ORDER BY bei Mehrfachabfrage

    Ich durchlaufe 3 MySQL Tabellen deren Inhalt
    ich mittels HTML in einer Tabelle zusammengefasst anzeige.
    Nun möchte ich den Inhalt entweder nach Datum, Postleitzahl,
    Stadt oder Typ geordnet wiedergeben.
    Hat jemand eine Idee wie ich das nun machen kann?

    PHP-Code:
    <?php

    $sql_ads 
    mysql_query("SELECT * FROM wxy WHERE standard = '1'"); // Datums-Abfrage
    while($row_ads mysql_fetch_assoc($sql_ads))
    {
      
    $sql_cmp mysql_query("SELECT * FROM xyz WHERE id = '$row_ads[priv_id]'"); // Postleitzahl- & Stadt-Abfrage
      
    while($row_cmp mysql_fetch_assoc($sql_cmp))
      {
        
    $sql_cat mysql_query("SELECT * FROM yza WHERE cid = '$row_ads[cid]' AND p_cid = '$row_ads[p_cid]'"); // Typ-Abfrage
        
    while($row_cat mysql_fetch_assoc($sql_cat))
        { 
    ?>
          <tr>
            <td><?=$row_ads[date]?></td>
            <td><?=$row_cmp[postcode]?></td>
            <td><?=$row_cmp[city]?></td>
            <td><?=$row_cat[type]?></td>
          </tr><?php
        
    }
      }
    }
    ?>
    Zuletzt geändert von kerbstone; 27.07.2005, 22:44.

  • #2
    Ach du Scheiße!!!!!!!! 3 Queries davon 2 in Schleifen? Au weia!!!!

    Angenommen, Tabelle 1 hat 50 Datensätze, Tabelle 2 20 und Tabelle 3 10 ... dann Wären das ja 50 * 20 = 1000 DB-Queries?

    Mein Lieber Scholli! Ich geb dir nen Tip: Beschäftige dich mal mit Joins. Da geht das ganze dann mit 1 einzigen Query. Gibt hier nen Thema in dem SQL-Forum ganz oben, schau dir das mal an.

    So, jetzt aber zu deiner Frage (hoffentlich hab ich dich grad nicht demotiviert...)

    -> Soll dein ORDER BY variabel sein?

    Dann per $_GET übergeben + per If-Abfrage eine Variable setzen, à la
    PHP-Code:
    if ($_GET['order'] == 'date'$order 'Datum';
             
    // elseifs
            
    else
                
    $order 'defaultwert'
    und ins SQL-Query nach ORDER BY dann halt $order einbauen... aber bitte bitte dringend mit Joins beschäftigen
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Ich habe mich nun mal mit JOINS beschäftigt, da ich einsehe,
      dass das mehr Sinn macht, gerade der Performance wegen *g*.

      Mein Code sieht nun folgender Maßen aus:
      PHP-Code:
      <?php
      $sql_ads 
      mysql_query("

      SELECT
              t1.date, t2.postcode, t2.city, t3.type
      FROM
              wxy t1 WHERE standard = '1'
              RIGHT JOIN xyz t2 ON t1.id = t2.priv_id
                         LEFT JOIN yza t3 ON t1.cid = t3.cid AND t1.p_cid = t3.p_cid"
      );

      while(
      $row_ads mysql_fetch_assoc($sql_ads))
      ?>
      <tr>
                                       <td><?=$row_ads[date]?></a></td>
                                       <td><?=$row_ads[postcode]?></td>
                                       <td><?=$row_ads[city]?></td>
                                       <td><?=$row_ads[type]?></td>
                                     </tr>
      <?php }
      ?>
      Jedoch erhalte ich die Fehlermeldung [COLOR=red]
      Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource (...) on line 82[/COLOR]

      In Zeile 82 steht bei mir der obige Code. Was mache ich falsch?

      Kommentar


      • #4
        ... wenn Du schon am lernen bist ...

        ... dann solltest Du Dir auch gleich noch die Funktion mysql_error() anschauen ... TIPP:

        $res = mysql_query("SELECT ....") or die(mysql_error());

        das gibt Dir 'ne vernünftige Fehlermeldung ... !

        PS.: die WHERE - Clause gehört in Deinem Falle ans Ende ... das steht aber in der SQL-Syntax beschreibung auch drin ... !
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Cool, danke, funktioniert nun wunderbar

          *Grummel* mysql_error() hat mir angezeigt, dass ich eine
          id vertauscht hatte. Sie befand sich nicht in Tabelle Eins sondern in Zwei.
          WHERE Clause steht nun natürlich am Ende...

          Kommentar


          • #6
            du solltest mysql noch mitteilen in welcher deine tabelle standard ist, also tx.standard.

            befindet sich es in einer der tabellen die du joinst, kannst du es auch mit in die ON Bedingung schreiben

            JOIN blub t2
            ON(t1id = t2_id AND t2.standard = 1)

            EDIT:
            Oh, das mit dem AND im ON hast du ja schon gemacht...

            Kommentar


            • #7
              Original geschrieben von prego

              EDIT:
              Oh, das mit dem AND im ON hast du ja schon gemacht...
              OffTopic:
              also, erst lesen, dann denken, ... dann antworten ...

              Kommentar


              • #8
                Ich habe leider wieder ein Problem mit dem ich mich seit Stunden
                rumquäle:
                Ich möchte über ein Formular (method=POST) den Datumsbereich
                einschränken der angezeigt wird, dazu habe ich folgendes gemacht:

                PHP-Code:
                if(!$form_select_Date)
                                               {
                                                 
                $form_year date(Y);
                                                 
                $form_month date(n);
                                                 
                $form_date $form_year."-".$form_month;

                                                 echo 
                $form_date;
                                               } else {
                                                 
                $form_year $_POST['form_year'];
                                                 
                $form_month $_POST['form_month'];

                                                 echo 
                $form_year."-".$form_month;
                }

                //Nun muss nur noch $form_year."-".$form_month als $newDate
                //in die WHERE Clause, dass sieht bei mir dann so aus:

                WHERE t1.standard '1' AND t1.date LIKE '%".$newDate."' ORDER BY $form_orderBy $form_type
                 ?>

                Leider erhalte ich keine Fehlermeldung, aber auch nicht das gewünschte Ergebnis.
                Das Datum in der MySQL Tabelle ist im Timestamp-Format... 

                Kommentar


                • #9
                  les mal hier....

                  http://dev.mysql.com/doc/mysql/en/da...functions.html

                  Benutz einfach die DatumsFunktionen die dir mySQL bietet. Die arbeit kann man schön in einer Query machen - warum also PHP bemühen

                  Kommentar


                  • #10
                    @prego
                    danke, werde da mal gucken

                    Kommentar

                    Lädt...
                    X