SQL - JOIN mit WHERE primärschlüssel

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

  • SQL - JOIN mit WHERE primärschlüssel

    Guten Morgen,

    konnte jetzt nichts passendes finden zu diesem Thema, welches mein Problem in der für mich verständlichen Form gelöst hätte, finden. Daher erstelle ich mal fix ein neues Thema =) Hoffe das stört niemanden.


    Und zwar.

    Bastle gerade mal eine Art Ticketsystem, wo ich mit verschiedenen Tabellen zusammenarbeite. Dieses Problem betrifft 2 Tabellen, die mit JOIN verarbeitet werden.

    Im Prinzip habe ich "Nachrichten" von "Konversationen" getrennt. Identifiziert werden sie durch die "conversation_id" die in beiden Tabellen vorkommt.
    Nun habe ich folgende SQL-Abfrage erstellt (müsste soweit an sich richtig sein):
    PHP-Code:
    mysql_query('SELECT conversations_info.*, conversations.* FROM conversations_info RIGHT JOIN conversations ON conversations_info.conversation_id = conversations.conversation_id WHERE conversation_id = '.$cid.' ORDER BY actualdate DESC'); 
    erhalte diesen Fehler:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in conversations.php on line 214

    Die Problematische Stelle konnte ich bereits lokalisieren: es muss an der WHERE Bedingung liegen, dass es nicht funktioniert. Also dem WHERE = conversation_id = '.$cid.' ...

    Daher die Frage kann man den gemeinsamen "Faktor" beider Tabellen nicht als WHERE Bedingung nutzen? Wenn doch, wo liegt mein Fehler oder gibt es logische also strukturelle Alternativen für die Umsetzung?

    Für Hilfe danke ich Euch sehr.

    Grüße

  • #2
    Hallo,

    ich tippe darauf, dass mysql_error() dir irgendetwas mit ambiguous column melden würde, wenn du es aufrufen würdest.

    Wenn ein Spaltenname in mehr als einer Tabelle vorkommt, musst du den Tabellennamen mit angeben, um MySQL mitzuteilen, welche Spalte du meinst.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Ja, in der Tat, es kommt ein Fehler:

      Column conversation_id in on clause is ambiguous
      Was mir sagt, dass conversation_id mehrdeutig ist, liegt es am "gleichen" namen?

      weil exakt dieser right join funktioniert mit konversationen und benutzern (wo die beiden primärschlüssel id und user_id heißen) und es nach conversation_id geordnet wird..

      Kommentar


      • #4
        Zitat von powermax Beitrag anzeigen
        liegt es am "gleichen" namen?
        Natürlich, woran sollte es sonst liegen? Ich hatte dir ja schon geschrieben, was du tun kannst. Hast du es jetzt hinbekommen?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          okay das problem wäre gelöst, vielen Dank für den Tipp! Habe noch ein ähnliches, Problem mit 3 Tabellen, die mit Join verbunden werden sollen.

          Erhalte mit folgender SQL-Abfrage einen "Not unique table/alias: 'conversations'" Fehler:

          PHP-Code:
          $result mysql_query('SELECT clients.*, conversations.*, conversations_info.* FROM clients RIGHT JOIN conversations ON clients.id = conversations.user_id RIGHT JOIN conversations ON conversations.conversation_id = conversations_info.conversation_id WHERE conversations_info.closed = "0" GROUP BY conversations_info.conversation_id ORDER BY conversations.actualdate DESC ') or die(mysql_error());; 
          Der Fehler meint so wie ich es verstehe, dass eine Tabelle nicht bzw. nicht mehr einzigartig ist - interpretation: weil sie 2x in einem Join vorkommt oder wie kann ich diese Fehlermeldung verstehen?

          =)

          UPDATE:

          habe etwas mit der Formulierung gespielt und nach Lösungswegen gesucht - leider ohne besseres Ergebnis, außer das mysql_error hier nichts ausgibt sondern wieder das übliche

          "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in"

          auftaucht. Was ja nicht sehr hilfreich ist.

          hier erstmal der Code, der auch jetzt etwas übersichtlicher ist:

          PHP-Code:
          $result = ('
                                      SELECT 
                                          clients.*, 
                                          conversations.*, 
                                          conversations_info.* 
                                      FROM 
                                          clients AS DB1 
                                      INNER JOIN 
                                          conversations AS DB2 ON DB1.id = DB2.user_id 
                                      INNER JOIN 
                                          conversations_info AS DB3 ON DB2.conversation_id = DB3.conversation_id 
                                      WHERE 
                                          DB3.closed = "0" 
                                      GROUP BY 
                                          DB3.conversation_id 
                                      ORDER BY 
                                          DB2.actualdate DESC
                                      
                                      '
          ) or die(mysql_error()); 
          Es gibt zwar ein schönes Sticky in diesem Unterforum aber bin mir jetzt nicht sicher ob das richtig für mein Problem ist :/
          Weiß einer Rat?
          Zuletzt geändert von powermax; 04.01.2013, 19:08.

          Kommentar


          • #6
            Gejoint hast du richtig (mit Aliassen), aber die Spaltenreferenzen (das zwischen SELECT und FROM) müssen ebenfalls auf die verwendeten Aliasse verweisen.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Also einfach ein AS wie bei den joins?

              PHP-Code:
              SELECT clients.* AS DB1, ... 
              So in etwa?

              Kommentar


              • #8
                Nein, aber so langsam solltest du mal überlegen, ob es nicht schneller und sinnvoller wäre, einfach SQL zu lernen, statt ewig herumzuprobieren. Wir helfen ja gerne, aber es ist einfach nicht machbar, jedem immer wieder dieselben Grundlagen vorzukauen.

                Code:
                SELECT db1.*, db2.*, ...
                Statt der originalen Tabellennamen einfach die Aliasse verwenden, genauso wie du es bei den Joins ja auch machst, wenn du die ON-Klausel angibst.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  hab ich so gemacht - keine Veränderung des Fehlers.

                  Kommentar


                  • #10
                    Zitat von powermax Beitrag anzeigen
                    hab ich so gemacht - keine Veränderung des Fehlers.
                    Wie lautet denn die Meldung von mysql_error()?
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      das hat mich, wie ich bereits geschrieben hatte, sowieso verwundert, dass es keine mysql_error() Fehlermeldung gab, sondern wie ohne mysql_error() am Ende

                      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in conversations.php on line 86
                      obwohl am Ende genau wie oben im Code das mysql_error() steht.
                      Hier noch einmal der Code so wie er bei mir in der Datei steht.

                      PHP-Code:
                      $result = ('
                                                  SELECT 
                                                      db1.*, 
                                                      db2.*, 
                                                      db3.* 
                                                  FROM 
                                                      clients AS db1 
                                                  INNER JOIN 
                                                      conversations AS db2 ON db1.id = db2.user_id 
                                                  INNER JOIN 
                                                      conversations_info AS db3 ON db2.conversation_id = db3.conversation_id 
                                                  WHERE 
                                                      db3.closed = "0" 
                                                  GROUP BY 
                                                      db3.conversation_id 
                                                  ORDER BY 
                                                      db2.actualdate DESC
                                                  
                                                  '
                      ) or die(mysql_error()); 

                      Kommentar


                      • #12
                        Und wo ist das mysql_query hin? Klar kannst du aus $result keine Datensätze abrufen, denn es ist nur der String mit dem Statement drin. Zwischen »$result = « und »('« sollte noch »mysql_query« dastehen, meinst du nicht auch?
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          jetzt versinke ich total im boden. Das kommt daher, wenn man zum austauschen schnell mal code im Windows editor schreibt lol..




                          Danke aber für deine Hilfe! =)


                          PS: Es klappt^^

                          Kommentar

                          Lädt...
                          X