2012-03-29 10 views
0

Ich habe ein einfaches Nachrichtenschema, wo ein "Thread" 2 oder mehr Benutzer zu einem Strom von Nachrichten bindet. Jede Nachricht gehört zu einem einzelnen Thread. Es funktioniert genau wie SMS-Nachrichten oder Facebook-Nachrichten.SQL - brauche eine Abfrage, um Nachrichten nach Empfänger zu suchen

eine Zeichenfolge (die einen Namen oder einen Teil des Namens eines Benutzers) Da muss ich eine Abfrage, die alle Themen finden, die denen entsprechen:

  1. den aktuellen Benutzer (Benutzer-ID) ist ein Mitglied des Fadens
  2. den Namen oder einen Teil des Namens eines Benutzers ist auch ein Mitglied des Gewindes

Hier meine Tabellen sind:

MessageThreads:
ThreadID
Lastupdated

MessageThreadUsers:
threadFK
userFK

Benutzer
userID
userFirstName
Userlastname
userFullName

Diese Abfrage wird alle Themen, die der aktuelle Benutzer gehört:

SELECT DISTINCT threadFK FROM MessageThreadUsers 
WHERE userFK = 'usr_developer' 

Aber wie würde ich jeden Thread mit allen Benutzern im Thread join (nicht den aktuellen Benutzer einschließlich) das Spiel mit Namen oder einen Teil des Namens ?

Antwort

1

Dies sollte Ihnen die anderen Benutzer aller Threads anzeigen, zu denen der Schlüssel 'usr_developer' gehört.

SELECT MT.ThreadId, U.userID, U.userFullName 
     FROM MessageThreads MT 

INNER JOIN MessageThreadUsers MTCU on (MTCU.threadFK = MT.threadID) 
INNER JOIN Users CU on (MTCU.userFK = CU.userID and CU.userID = 'usr_developer') 

INNER JOIN MessageThreadUsers MTU on (MTU.threadFK = MT.threadID) 
INNER JOIN Users U on (MTU.userFK = U.userID and U.userID <> 'usr_developer') 

    WHERE U.UserFullName like '%John%' -- Do your filters here 

Dies schließt sich gegen den Tabellen zweimal, zuerst, kommen wir an den Tisch Benutzer nur den Satz von Fäden zurückziehen, die einen Benutzer mit der ID ‚usr_developer‘ haben. Dann verbinden wir die resultierenden Threads erneut mit der users-Tabelle, diesmal mit der Benutzer-ID usr_developer. Schließlich können wir die Ergebnismenge nach dem Namen filtern.

+0

Ups nur noch einmal gelesen, ich repariere dies um den aktuellen Benutzer muss ein Mitglied des Threads sein. –

+0

Es gibt einen Fehler in Zeile 5: MTC.userFK kann nicht gebunden werden. Was soll das sein? – Redtopia

+0

MTCU * Entschuldigung. Behoben –

Verwandte Themen