[ gelöst ] [mysql] - zwei queries verbinden

  • hallo community!

    ...ich bleibe grade voll an einem mysql-query hängen.... -.-
    es geht um einen messaging-service. Dafür habe ich 2 Tabellen, einmal "mitglieder" und einmal "messages", die sind so aufgebaut:
    mitglieder: benutzername|passwort
    messages: message|msgfrom|msgto|read [dabei gibt read an, ob die nachricht vom empfänger schon gelesen wurde]

    ich möchte nun, auf der Willkommensseite, eine Liste aller angemeldeter Benutzer anzeigen und dahinter wie viele ungelesene Nachrichten sich in diesem Thread befinden.

    bis jetzt habe ich:

    SQL
    SELECT benutzername FROM mitglieder WHERE benutzername!='<angemeldeter_user>'


    und

    SQL
    SELECT COUNT(*) FROM messages WHERE msgfrom='<einer_der_benutzer>' AND msgto='<angemeldeter_user>' AND read='unread'

    ...wie kann ich nun die beiden queries miteinander kombinieren?
    mit dem ganzen UNION, OUTER JOIN, INNER JOIN, LEFT OUTER JOIN etc bin ich total verwirrt.... -.-

    danke für die Hilfe!!! ;)

    Einmal editiert, zuletzt von r4lf (13. März 2011 um 14:28)

  • Danke für die flotte Antwort! ;)

    ...was in beiden Tabellen gleich ist, sind die Namen der Benutzer....also könnte man "msgfrom", "msgto" oder "benutzername" miteinander auf übereinstimmungen prüfen... eine "userid" hab ich auch, jedoch ist die vorerst ohne benutzung.....

  • i2c: danke ;)
    ....aber leider ist das Resultat nicht wie von mir gewünscht... ;(
    dein Query gibt nur die Anzahl der ungelesenen Nachrichten zurück, ich hätte aber gerne:

    Benutzer1 - 1 Ungelesene Nachrichten
    Benutzer2 - 2 Ungelesene Nachricht
    Benutzer3 - keine ungelesene Nachricht
    etc...

    ...wo ist der Unterschied zwischen deinem Query und einem

    SQL
    SELECT COUNT(*) FROM messages WHERE msgto='benutzer' AND msgread='unread'

    ?

  • ujj....hab noch mal hart überlegt, und bin zu einer lösung mit "GROUP BY" und "UNION" gekommen:
    [sql-pros bitte augen zumachen, ich vermute dass das relativ umständlich ist..... :whistling: ]

    SQL
    SELECT COUNT(*) as counter,msgfrom as benutzername FROM messages
    WHERE msgto='<benutzer>' AND msgread='unread' GROUP BY msgfrom
    UNION SELECT 0, benutzername FROM mitglieder
    WHERE benutzername NOT IN (
    SELECT msgfrom FROM messages 
    WHERE msgto='<benutzer>' AND msgread='unread' GROUP BY msgfrom  )
    AND benutzername !='<benutzer>';


    vielen Dank für eure Hilfe!

    :closed:

  • öh.... ?? ;)
    deine lösung? o_O"
    hab ich die überlesen??

    ich hab ja eindeutige zuordnungen in beiden tabellen, und zwar über den benutzernamen (statt einer id), deshalb konnte ich auch die unterabfrage mit dem IN schreiben....
    aber danke für deine Hilfe!