Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql select if und else 2 tabellen

Einklappen

Neue Werbung 2019

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

  • mysql select if und else 2 tabellen

    hallo ihr lieben.
    diesmal bin ich im einsteiger forum bestimmt richtig gelandet.

    ich habe 2 tabellen

    tabelle messages:
    Code:
    msg_id - message - vonid - sichtbarfuer
    1 - text - 66 - alle
    2 - text1 - 12 - freund
    3 - text2 - 31 - alle
    4 - text3 - 66 - freund
    tabelle freunde:
    Code:
    freund1 freund2 ist
    66 - 1 - freund
    12 - 1 - keinfreund
    31 - 1 - keinfreund
    12 - 1 - freund
    ich bin in diesem fall angenommener weise userid=1

    nun möchte ich alle nachrichten ausgegeben haben die sichtbar für "alle" sind und eine überprüfung bei sichtbar für "freund" wenn ich in der tabelle freunde ein freund bin.

    in meinem beispiel müssten jetzt message 1, 3 und 4 ausgegeben werden.
    message 2 nicht, da ich "keinfreund" mit freund nr 12 bin.

    hoffe ihr habt mich verstanden...
    ist eine if und else abfrage beim mysql select möglich?
    wie stell ich das an?

    MySQL :: MySQL 5.1 Referenzhandbuch :: 12.2 Ablaufsteuerungsfunktionen
    ist das der richtige weg?

    danke sandra


  • #2
    diesmal bin ich im einsteiger forum bestimmt richtig gelandet.
    Nö. Datenbankfrage, oder was meinst Du?

    [MOD: verschoben]
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      entschuldige ... da gibt es keine klassifizierung zwischen einsteiger und fortgeschrittener ... das nächste mal mach ich es wirklich gleich richtig ...

      Kommentar


      • #4
        Als erstes machst Du einen JOIN zwischen beiden Datenmengen. Relevant ist dabei das Vergleichskriterium vonid = freund1 (siehe unten). Danach schränkst Du die entstehende Menge ein
        - auf die, wo der status sichtbar für alle ist
        - zusätzlich auf die, wo Du als freund2 auftauchst und der status freund ist

        ABER: Das Problem ist, dass freund1 und freund2 theoretisch auch umgekehrt sein könnten (das hängt vermutlich damit zusammen, wer wen „geworben“ hat. In diesem Fall müsstest Du alle JOINS doppelt ausführen, die WHERE-Clauses darauf bezogen ergänzen und dann noch alle doppelten Datensätze ausfiltern. Siehe auch: http://www.php.de/datenbanken/67370-...datenbank.html
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          habe immer 2 einträge bei freunden um das zu umgeben, spricht:

          freund1 freund2
          1 - 66 - freund
          66 - 1 - freund

          ok, jetzt schau ich mal bei JOIN ... danke schonmal

          Kommentar


          • #6
            au backe, das sieht sehr konfus aus ...

            SELECT A.EineSpalte, B.EineAndereSpalte
            FROM Tabelle1 AS A, Tabelle2 AS B WHERE A.EinWert = B.EinAndererWert;

            was ist in diesem fall A und B?

            das ist der richtige ansatz!?

            Kommentar


            • #7
              Da es auch Nachrichten ohne Freund-Bezug betreffen soll ist ein LEFT JOIN mit den Messages auf der linken Seite erforderlich. Probier Dich mal aus und poste Deine Fortschritte. http://aktuell.de.selfhtml.org/artik...nbanken/joins/
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                ok mach ich danke

                Kommentar


                • #9
                  SELECT * FROM messages
                  INNER JOIN freunde ON freund1.user = messages.userid AND freunde.ist='freund'

                  wo beziehe ich den user ein, also bzw. mich mit der userid=1 zur abfrage?

                  Kommentar


                  • #10
                    ist ein LEFT JOIN mit den Messages auf der linken Seite erforderlich
                    Und * bitte gleich vergessen!
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      SELECT userid, messages, id FROM messages
                      LEFT JOIN freunde ON '1'=freunde.freund1 and INNER JOIN freunde ON freunde.freund1 = messages.userid AND freunde.ist='freund'

                      au backe
                      ?

                      Kommentar


                      • #12
                        Bitte nicht den * benutzen! Alleine durch Aufzählungen und die entspr. Klassennamen/aliase gewinnst DU übersicht. Zudem: Bitte formatieren:

                        Code:
                        SELECT  * 
                        FROM        messages
                          LEFT JOIN ...
                        Was soll
                        LEFT JOIN '1'
                        sein und probierst DU die Queries überhaupt aus?
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          ja mach ich ... die 1 sollte meine userid darstellen ...

                          Kommentar


                          • #14
                            $result1=mysql_query("SELECT msg_id, messages, userid FROM messages
                            LEFT JOIN freunde ON freunde.freund1='1' and freunde.ist='freund' GROUP BY msg_id");

                            gibt mir noch immer alles aus

                            vielleicht schaff ich es auch nicht wirklich komplex zu denken

                            Kommentar


                            • #15
                              lassen wir mal "sichtbarfuer" weg, also es sollen nur "messages" von von freunden zu sehen
                              dann ist doch die bedingung


                              wenn ICH(userid=1) = freund1 Where freund1='freund'

                              mysql_query("SELECT msg_id, messages, userid FROM messages
                              LEFT JOIN freunde ON freunde.freund1='1' WHERE freunde.ist='freund' GROUP BY msg_id");

                              oder lieg ich da jetzt völlig falsch?

                              Kommentar

                              Lädt...
                              X