2010-11-29 7 views
1

Die Website soll Benutzern ermöglichen, an den Kursen teilzunehmen und ihre Aktualisierungen zu diesen Kursen zu veröffentlichen und auch die von anderen gemachten Kurs-Updates zu erhalten (Imagen-Kurse als Gruppen in Facebook, aber in meinen Website-Benutzern NUR Updates) . durch die Kurse)Wie bestimmte Zeilen aus einer Tabelle in MySQL aufrufen? (siehe den Fall)

Wenn der Benutzer Login auf der Website, wird er suposed alle Updates in den Kursen zu sehen ist er bereits beigetreten in

habe ich viele Tabellen in MySQL:

  • 'updates' mit diesen Attributen (id, account_id, course_id, datetime, content) noticin g dass Kurs und Konto-IDs sind Fremdschlüssel ..
  • 'Kurse', die diese Attribute haben (id, name, ..)
  • 'Konten', die diese Attribute haben (id, full_name, ...)
  • 'accounts_courses_relationship' (account_id, course_id), um die Beziehungen zwischen Benutzern und Kursen abzubilden.

Ich habe viele Male versucht, aber das einzige, was ich bekommen, ist für alle Kurse alle Updates zu zeigen, ohne die Updates von den Kursen ohne dass Benutzer kein Mitglied ist, wie folgt:

$sql = "SELECT DISTINCT datetime, content 
    FROM updates 
    WHERE account_id != {$account_id} 
    ORDER BY datetime DESC 
    LIMIT 10"; 

So, wie die Updates von diesen Kursen ausschließen?

Hinweis: vergessen Sie nicht, dass alle Zuordnungen zwischen Benutzern und Kurse in einer Tabelle oben gezeigt registriert sind ..

Antwort

1

so etwas wie dies funktionieren sollte

select * 
from updates u 
join accounts_courses_relationship r on u.courseid = r.courseid 
where r.account_id = {$account_id} 
+0

Ausgezeichnet !! Es klappt – Fahd

2

Nun, ich es nicht sehen, Ihr Problem sein könnte, aber wie wäre es

SELECT ... FROM updates where account_id = {$account_id} 

Would Wählen Sie alle Updates für den aktuellen Benutzer und damit alle Updates aus, an denen der Benutzer interessiert ist?

+0

im Hause, ich bin interessiert an die Updates anderer in meinen Kursen, nicht an meinen Updates interessiert. – Fahd

1

Sie zu Innen die Updates und Kurse und Konten verbinden und accounts_courses Tabellen.

 select acr.accountid, acr.courseid, courses.name, accounts.fullname, updates.datetime, updates.content 
     from accounts_courses_relationship acr 
     inner join courses on acr.courseid=courses.courseid 
     inner join accounts on acr.accountid = accounts.accountid 
     inner join updates on updates.accountid= accounts.accountid and updates.courseid=courses.courseid 
     where accountid = {?} 
     order by updates.datetime desc 
1

Wenn Sie sehen Updates zu Kursen von anderen Usern interessiert sind (nicht Sie) und Sie sind ein registrierter Benutzer dieser Kurse:

SELECT DISTINCT datetime, content 
FROM updates 
WHERE account_id != {$account_id} 
    and course_id in (select acr.course_id from accounts_courses_relationship acr where acr.account_id = updates.account_id) 
ORDER BY datetime DESC 
LIMIT 10 
Verwandte Themen