Ankündigung

Einklappen
Keine Ankündigung bisher.

Kommentarfunction

Einklappen

Neue Werbung 2019

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

  • #16
    Hey,

    ok. Vielen Dank.

    Würdest du es dir wenn möglich bitte durchlesen. Denn ich möchte wissen ob ich es richtig verstanden habe. Danke.

    Habe jetzt aus dem INNER JOIN ein LEFT JOIN gemacht und dann bei der Ausgabe überprüft ob diese Daten im Array schon vorhanden sind nun funktioniert es.

    Ich habe noch eine allerletzte Frage.

    Ich verbinde die 3 Tabellen ja. Nun möchte ich herausfinden welcher User was gepostet hat und welcher User was kommentiert hat.
    Ich habe bereits dies programmiert, welchen den User ermittelt, der ein Beitrag erstellt hat, nur ich brauche nochmal eine Abfrage in diesem sql-statement welche mir auch die Id's aus der comments Tabelle mit der Id aus der user tabelle selektiert.
    Nur wenn ich jetzt noch ein join mache oder ein AND dann gibt der Errors aus.

    Beim hinzufügen eines weiteren Joins :
    SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'b'

    Beim hinzufügen eines AND :
    Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'b ON b.id = c.user_postId ORDER BY p.id ASC, c.date_inserted' at line 32

    Ich brauche noch eine Verbindung zwischen b.id und c.user_postId um auch herauszufinden wer was gepostet hat.

    Mein aktuelles Statement :


    PHP-Code:
    $sql "SELECT

                            p.id,
                            p.user_id,
                            p.post,  
                            p.imageOrder,
                            p.postlike,
                            p.postheart,
                            p.inserted,
                            p.edited,

                            c.postNumber,
                            c.user_postId,
                            c.comment,
                            c.date_inserted,
                            c.date_edited

                            b.id,
                            b.username

                            FROM
                               post p
                            LEFT JOIN
                                 comments c ON c.postNumber = p.id
                            LEFT JOIN
                              user b ON b.id = p.user_id
                            ORDER BY
                                p.id ASC, c.date_inserted DESC "

    Kommentar


    • #17
      Ja, da fehlt ein Komma nach "c.date_edited"
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #18
        Hey,

        gut.

        ups, stimmt. Aber das ändert daran auch nichts.

        Ich habe jetzt eine neue Tabelle erstellt, in welcher ich die id sowie den usernamen abspeichere, extra, für die findung des Users welcher was kommentiert hat. Gibt es denn eine bessere Lösung ?

        Kommentar


        • #19
          Klingt gut.

          Code:
          Tabelle user
          
          id | name | ...
          
          
          Tabelle thema
          
          id | user_id | betreff | ...
          
          
          Tabelle kommentar
          
          id | thema_id | user_id | ...
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #20
            Gut

            Ja so habe ich ja meine Tabellen. Aber ich brauche ja die user welche den Beitrag kommentiert haben. Den User, welcher ein Beitrag erstellt hat, habe ich ja schon. Und wenn ich eine Tabelle mit der id genutzt habe kann ich nicht nochmal ein JOIN machen, denn diese ist, die ich dann im JOIN verwende schon vergeben oder ich bekomme ein Error welcher eine Falsche Syntax als Fehlermeldung ausgibt.

            Siehe Fehlermeldungen die ich beim Versuchen erhalten habe:

            Bei nem neuen Join
            SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'b'

            Beim hinzufügen eines AND :
            Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'b ON b.id = c.user_postId ORDER BY p.id ASC, c.date_inserted' at line 32

            Kommentar


            • #21
              Schau mal die geparste Query an die du an die DB schickst: https://php-de.github.io/jumpto/sql/...query-ausgeben
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #22
                Hey,

                also die Query sieht so aus (inklusive Fehlermeldung):
                Code:
                object(PDOStatement)#2 (1) { ["queryString"]=> string(1015) "SELECT p.id, p.user_id, p.post, p.imageOrder, p.postlike, p.postheart, p.inserted, p.edited, c.postNumber, c.user_postId, c.comment, c.date_inserted, c.date_edited, b.id, b.username FROM post p LEFT JOIN comments c ON c.postNumber = p.id LEFT JOIN user b ON b.id = p.user_id LEFT JOIN user b ON b.id = c.user_postId ORDER BY p.id ASC, c.date_inserted DESC " } Es ist ein Fehler aufgetreten: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'b'
                So das Statement:
                PHP-Code:
                $sql "SELECT

                                        p.id,
                                        p.user_id,
                                        p.post,  
                                        p.imageOrder,
                                        p.postlike,
                                        p.postheart,
                                        p.inserted,
                                        p.edited,

                                        c.postNumber,
                                        c.user_postId,
                                        c.comment,
                                        c.date_inserted,
                                        c.date_edited,

                                        b.id,
                                        b.username

                                        FROM
                                           post p
                                        LEFT JOIN
                                                 comments c ON c.postNumber = p.id
                                        LEFT JOIN
                                                  user b ON b.id = p.user_id
                                         LEFT JOIN
                                                 user b ON b.id = c.user_postId

                                        ORDER BY
                                            p.id ASC, c.date_inserted DESC "

                Kommentar


                • #23
                  ich vermute id bei Tabelle user ist kein primary key, überprüfe das mal.

                  Kommentar


                  • #24
                    Hey,

                    die Spalte id aus der Tabelle user ist ein Primärschlüssel.

                    Kommentar


                    • #25
                      Habe ich jetzt erst gesehen
                      Code:
                       LEFT JOIN
                                                        user b ON b.id = p.user_id
                                               LEFT JOIN
                                                       user b ON b.id = c.user_postId
                      Du verwendest 2 mal den gleichen Alias b für die Tabelle user. Aliase dürfen aber nur einzigartig vergeben werden, der 2. Alias muss also anders lauten. Ob deine Query nun sinnvoll ist oder nicht, habe ich mir nicht näher betrachtet.

                      Kommentar


                      • #26
                        Hey,

                        ja ich sollte ja die SQL-Query mal herzeigen, habe ich ja dann gemacht.

                        Habe jetzt ein AND hinzugefügt also:
                        PHP-Code:
                           LEFT JOIN            user b ON b.id p.user_id       AND b.id c.user_postId 
                        Wenn ich es so mache, werden nur die ganzen Beiträge ausgegeben. Keine Kommentare mehr.

                        Kommentar

                        Lädt...
                        X