2010-11-29 13 views
1

このウェブサイトは、コースに参加したり、これらのコースに更新を投稿したり、他の人が行ったコースの更新を受けたりすることを目的としています(Facebookのグループとしてのimagenコースですが、 。)コースを通じてMySQLのテーブルから特定の行を呼び出す方法は?

ウェブサイトへのユーザのログインは、彼は彼がすでに参加しているコースですべての更新を確認するためにsuposedさ

私は、MySQLに多くのテーブルを持っている:

  • これらの属性(id、account_id、course_id、datetime、content)を持つ 'updates' noticinグラムこれらの属性持っているそのコースとアカウントIDが外部キーです。これらの属性(ID、名前、...)
  • を持って
  • コース開講 '「アカウント」(ID、FULL_NAMEを、...)
  • 'accounts_courses_relationship'(account_id、course_id)、ユーザーとコース間の関係をマップします。

は、私は何度も試してみましたが、私が得る唯一のものは、次のように、ユーザーがメンバーでないコースからのアップデートを除外することなく、すべてのコースのすべてのアップデートを表示することです:

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

これらのコースから更新を除外する方法は?

注:ユーザーとコースの間のすべてのマッピングは、上に示したテーブルに登録されていることを忘れないでください...

答えて

1

何かが、内側にあなたが持っている

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

優秀!!できます – Fahd

2

さて私はあなたの問題を見ていないかもしれないが、方法についての

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

う現在のユーザー、つまりユーザーが興味を持っているすべての更新プログラムをすべて選択しますか?このような

+0

、私はに興味私のコースの他人の更新、私の更新には興味がありません。 – Fahd

1

を動作するはずアップデートやコースやアカウントに参加して、テーブルをaccounts_courses。

 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

あなたが他のユーザー(あなたではない)からのコースへの更新を見ることに興味を持っているとあなたはそれらの科目の登録ユーザーなら:自宅で

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 
関連する問題