Как вызвать конкретные строки из таблицы в MySQL? (см. дело) - PullRequest
1 голос
/ 29 ноября 2010

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

Когда пользователь входит на сайт, он должен видеть все обновления в курсах, к которым он уже подключен.

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

  • «обновления», которые имеют эти атрибуты (id, account_id, course_id, datetime, content), отметив, что курс и идентификаторы учетной записи являются внешними ключами.
  • «курсы», которые имеют эти атрибуты (id, name,..)
  • «учетные записи», которые имеют эти атрибуты (id, полное_имя, ...)
  • «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";

Итак, как исключить обновления из этих курсов?

Примечание: не забывайте, что все сопоставления между пользователямии курсы зарегистрированы в таблице, показанной выше ..

Ответы [ 4 ]

2 голосов
/ 29 ноября 2010

Ну, возможно, я не вижу вашей проблемы, но как насчет

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

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

1 голос
/ 29 ноября 2010

Если вы заинтересованы в получении обновлений курсов от других пользователей (не от вас), и вы являетесь зарегистрированным пользователем этих курсов:

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
1 голос
/ 29 ноября 2010

Вы должны присоединиться к таблицам обновлений, курсов, учетных записей и учетных записей.

       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 голос
/ 29 ноября 2010

как то так должно работать

select * 
from updates u
join accounts_courses_relationship r on u.courseid = r.courseid
where r.account_id = {$account_id}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...