Создание канала активности профиля пользователя - PullRequest
2 голосов
/ 24 июня 2010

Мне нужно создать фид активности для перехода на страницу профиля каждого пользователя, показывающую, что он делал на сайте.

Существует три таблицы: комментарии, рейтинги, пользователи

Я хочу, чтобы в ленту входили комментарии и оценки, опубликованные пользователем.

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

Все записи в ленте должны быть упорядочены по дате.

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

SELECT comments.date, comments.url AS comment_url, comments.user_id, ratings.date, ratings.url AS rating_url, ratings.user_id, users.id, users.username
FROM comments, ratings, users
WHERE comments.user_id=%s
AND comments.user_id=users.id
AND ratings.user_id=%s
AND ratings.user_id=users.id
ORDER BY ratings.date, comments.date DESC

1 Ответ

3 голосов
/ 24 июня 2010

JOIN.Кажется, вы это знаете, но вот как: SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.id

Таким образом, насколько я могу судить, вы пытаетесь заказать две разные вещи вв то же время.Наиболее близким, я думаю, может быть что-то вроде:

(SELECT comments.date AS date, users.username AS name, comments.url AS url CONCAT('Something happened: ',comments.url) AS text 
    FROM comments LEFT JOIN users ON comments.user_id = users.id 
    WHERE users.id = %s)
UNION
(SELECT ratings.date AS date, users.username AS name, ratings.url AS url CONCAT('Something happened: ',ratings.url) AS text
    FROM comments LEFT JOIN users ON comments.user_id = users.id 
    WHERE users.id = %s)
ORDER BY date DESC LIMIT 0,10

Обратите внимание, что столбцы обеих частей объединения совпадают.Я почти уверен, что это необходимо для того, чтобы что-то подобное заработало.Вот почему у меня есть оператор CONCAT, который позволяет вам создать строку, которая работает по-разному между оценками и комментариями.

...