2010-11-29 2 views
1

Веб-сайт предназначен для пользователей, позволяющих им присоединяться к курсам и размещать их обновления на этих курсах, а также получать обновления курса, сделанные другими (воображать курсы как группы в Facebook, но на моем сайте пользователи публикуют обновления ТОЛЬКО . через курсы)Как вызывать определенные строки из таблицы в MySQL? (см. случай)

Когда пользователь Войти на сайт, он suposed видеть все обновления в курсах он уже присоединился в

у меня есть много таблиц в MySQL:

  • «обновления», которые имеют эти атрибуты (id, account_id, course_id, datetime, content) noticin г, что курс и идентификатор учетной записи являются внешними ключами ..
  • «курсы», которые имеют эти атрибуты (идентификатор, имя, ..)
  • «счета», которые имеют эти атрибуты (идентификатор, 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 2010-11-29 19:42:58

2

Ну я мог бы быть не видя вашу проблему это, но как насчет

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

Would 't это выбрать все обновления для текущего пользователя и, следовательно, все обновления, которые пользователь интересует?

+0

в доме, я заинтересован в обновления других на моих курсах, не интересующиеся моими обновлениями. – Fahd 2010-11-29 19:36:23

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 
Смежные вопросы