2013-07-23 4 views
0

У меня есть система, в которой пользователь может подписаться на других людей, а также на курс. Так джон может быть следующая вылазка, но и после курса таких как МАТЕМАТИКА 125. Во всяком случае, вот как мои таблицы созданыКак мне выполнить этот запрос?

Courses 
CRN | id | course_number | subject | course_name | 
-------------------------------------------------- 

users 
id | email | name | 
------------------- 

user_courses (shows relationship between an user and a course) 
user_id | CRN 
------------- 

followers 
follower | followee | id 
------------------------- 

course_updates 
id | CRN | timestamp | action | user_id 
--------------------------------------- 

Я хотел бы иметь возможность создавать новостной канал из этих таблиц, который показывает имя пользователя вместе с информацией о курсе и добавляет ли он или отбрасывает курс; однако мне трудно это делать. Все мои попытки до сих пор вернули null. Вот моя текущая попытка

$this->db->query("SELECT * 
        FROM courses, user_courses, course_updates 
        WHERE courses.crn = course_updates.crn 
        AND user_courses.crn = course_updates.crn 
        AND user_courses.user_id = ? ", $vars); 

переменная передается в $ через вары это идентификатор пользователя из текущего пользователя в систему. Любая помощь делает этот запрос? Спасибо.

+0

Является ли ваша проблема с mysql или php? – Strawberry

+1

Вы хотите отобразить имя пользователя, но вы не выбираете из таблицы «пользователи» ... –

+0

Возможно, вам следует разделить этот запрос на несколько небольших и четких запросов? и попробуйте использовать LEFT JOIN. –

ответ

0
SELECT user_courses.*,courses.*,user.*,course_updates.* 
FROM 
    user_courses 
     INNER JOIN courses ON user_courses.CRN=courses.CRN 
     INNER JOIN users ON user_courses.user_id =users.id 
     INNER JOIN course_updates ON user_courses.CRN=course_updates.CRN 
WHERE users.id=$id 

Надеюсь, это поможет вам.

0

Ваш основной запрос должен работать, что предполагает, что это может быть проблема с данными.

Использование более читаемым присоединиться синтаксис:

SELECT * 
FROM courses 
    INNER JOIN course_updates ON courses.crn = course_updates.crn 
    INNER JOIN user_courses ON user_courses.crn = course_updates.crn 
    INNER JOIN users ON users.id = user_courses.user_id 
WHERE users.id = ? 

Вы можете разместить некоторые тестовые данные (или просто установить его на SQL скрипкой)

1
SELECT user.name, 
courses.* , 
if(course_updates.action IS NULL, 'No Action By User',CONCAT(user.name,' ',course_updates.action,' the ',(select course_name FROM user_courses WHERE user_courses.CRN=course_updates.CRN))) 

FROM users 
INNER JOIN user_courses ON user_courses.user_id =users.id 
INNER JOIN courses ON user_courses.CRN=courses.CRN 
LEFT JOIN course_updates ON user_courses.user_id=users.id 

Здесь Вы можете найти все пользователю курсы и если пользователь делает какие-либо действия на любых курсах

, если вы найдете данные о твердых частиц, поэтому добавьте

WHERE users.id=$id 
+0

ничего себе. Мне действительно нужно прочитать эту статью. Спасибо! – user2605381

+0

'@ user26 ...' Если вы нашли этот ответ как Use full Than Отметьте это как принятый ответ. – HybrisFreelance

Смежные вопросы