2 SQL Tabellen - Sortierung fehlerhaft

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

  • 2 SQL Tabellen - Sortierung fehlerhaft

    Ich erhalte zur Zeit eine falsche Sortierung bei der Abfrage
    meiner Datenbank. Sortiert werden soll nach ID im DESC Modus.

    Meine Abrafge sieht so aus:

    PHP-Code:
    $sql_categories mysql_query("SELECT * FROM categories");

    while(
    $row_categories mysql_fetch_assoc($sql_categories))
    {

      
    $sql_ads mysql_query("SELECT * FROM ads WHERE 
    cid = '
    $cid' AND p_cid = '$p_cid' ORDER BY id DESC");

      while(
    $row_ads mysql_fetch_assoc($sql_ads))
      {
        echo 
    $row_ads["id"]."<br>";
      }
    }

    // Die Ausgabe:
    //
    //5
    //7
    //1
    //8
    //6
    //3
    //9
    //2
    //4 
    Wieso funktioniert die Sortierung hier nicht?

    Ich verstehe es nicht...
    Ich bin dankbar für jeden noch so kleinen Hinweis!!!
    Zuletzt geändert von kerbstone; 18.11.2006, 17:03.

  • #2
    Re: 2 SQL Tabellen - Sortierung fehlerhaft

    Wir kennen den Inhalte deiner DB nicht, aber es könnte sein, dass der Code genau das macht, was man erwartet:

    äußere Schleife, innere Schleife, Ausgabe 5, 7
    äußere Schleife, innere Schleife, Ausgabe 1, 8
    äußere Schleife, innere Schleife, Ausgabe 6
    äußere Schleife, innere Schleife, Ausgabe 3, 9
    äußere Schleife, innere Schleife, Ausgabe 2, 4.

    Informiere dich mal über JOINs

    Kommentar


    • #3
      Die Tabelle categories enthält

      eine Hauptkategorie 'cid' und Unterkategorie 'p_cid' als
      auch die dazugehörigen Bezeichnungen 'type' und 'title'.
      Die Einträge hier sind von 1 beginnend bis 10 aufsteigend.

      Die Tabelle ads enthält

      die IDs zur Zuordnung der jeweiligen Kategorien ('cid', 'p_cid').
      Auch hier beginnen die Einträge von 1 beginnend bis xx steigend.

      Kommentar


      • #4
        Ich habe es jetzt mit JOINS probiert und
        erhalte die folgende Fehlermeldung:

        PHP-Code:
        $sql_ads mysql_query("SELECT t1.id AS id FROM ads t1 RIGHT JOIN 
        categories t2 WHERE t1.cid = t2.cid AND t1.p_cid = t2.p_cid ORDER BY
         t1.id DESC"
        ) or die (mysql_error());

        // Fehlermeldung:
        You have an error in your SQL syntaxcheck the manual that
        corresponds to your MySQL server version 
        for the right syntax to use
        near 'WHERE t1.p_cid = t2.p_cid ORDER BY t1.id DESC' at line 1 

        Kommentar


        • #5
          PHP-Code:
          categories t2  WHERE t1.cid 
          na dazwischen fehlt ja auch noch was. Woher soll mysql denn wissen, anhand welcher spalte du joinen willst.

          Kommentar


          • #6
            Genau, das wolltest du zwar mit "WHERE t1.p_cid = t2.p_cid" sagen, aber so funktionierts nicht. Zumindest nicht wenn du irgendwas mit JOIN vorgibst, RIGHT oder was auch immer. Lies nochmal ne gute Stunde durch die Referenz von MySQL. Nicht nur zu Joins, auch zur allgemeinen Syntax von SELECT-Queries.

            Kommentar


            • #7
              Hier ist meine Lösung dank eurer Hilfe )

              PHP-Code:
              $sql_ads mysql_query("SELECT *,t1.id AS id,t1.origin_id AS
              origin_id,t1.origin AS origin,t2.type AS type,t2.title AS title FROM
              ads t1 INNER JOIN categories t2 ON t1.cid = t2.cid AND t1.p_cid = t2.p_cid
              WHERE t1.status = '1' ORDER BY t1.id DESC LIMIT 5"
              ) or die (mysql_error()); 

              Kommentar


              • #8
                Nun habe ich das Problem, dass auf einmal die Titel der Kategorien nicht
                mehr angezeigt werden. Alles was ich verändert habe ist, dass
                eine Abfrage von Benutzern nach PLZ hinzugekommen ist:

                Ist die JOIN Abfrage falsch?

                PHP-Code:
                $sql_ads mysql_query("

                SELECT t1.id AS id,t1.origin_id AS origin_id,t1.origin AS origin,
                t2.type AS type,t2.title AS title FROM ads t1

                INNER JOIN categories t2 ON t1.cid = t2.cid AND t1.p_cid = t2.p_cid

                RIGHT JOIN customers_private t3 ON t1.origin_id = t3.id AND
                t1.origin = 'customers_private'

                LEFT JOIN customers_business t4 ON t1.origin_id = t4.id AND
                t1.origin = 'customers_business'

                WHERE t1.status = '1' AND t3.postcode BETWEEN 01000 AND 09999

                AND t4.postcode BETWEEN 01000 AND 09999 ORDER BY t1.id DESC

                LIMIT 
                $begin,$count") or die (mysql_error()); 
                Zuletzt geändert von kerbstone; 19.11.2006, 15:45.

                Kommentar

                Lädt...
                X