У меня есть проблема, которую я не могу понять сам. Я пытался использовать LEFT JOIN и т.д., Но ничего не работает. Я использую MySQL, чтобы вы знали.
Я создаю для меня небольшой блогпортал, а мои друзья и все пользователи имеют свой собственный блог.
базы данных:
пользователей: Я бы, имя пользователя, пароль, и т.д.
блог: Я бы, заглавие, текст, Идентификатор пользователя, и т.д.
отношения follower_id, following_id
Я запрашиваю свои собственные блогпосты следующим образом:
SELECT * FROM microblog WHERE user_id = {$user_id} ORDER BY posted DESC
и я перечислю своих друзей следующим образом:
SELECT * FROM users, relations WHERE relations.follower_id = {$user_id} AND relations.following_id = users.id
Это была легкая часть. НО.
Я скорее ПРИСОЕДИЯСЬ к таблицам, потому что я также хочу перечислить в моем цикле мои блоги. Но я не просто хочу, чтобы сообщение показывалось, я также хочу получить информацию о пользователе, который разместил его, чтобы затем получить информацию из таблицы пользователей. И это меня беспокоит! Я не могу понять.
Вкратце: я хочу перечислить свои собственные сообщения в блогах и всех пользователей, которых я являюсь друзьями, в моем собственном цикле. И я также хочу отображать имя пользователя и адрес электронной почты рядом с сообщениями.
Надеюсь, вы поймете, что я имею в виду.
/Tobias
Швеция
Как насчет?
select
u.username,
u.email,
m.title,
m.text
-- ... etc
from microblog m
inner join user u on m.user_id = u.id
where m.user_id = {$user_id}
or m.user_id in (select
following_id
from relations r
where follower_id = {$user_id}
);
Попробуйте это?
SELECT m.*
FROM microblog m
INNER JOIN users u ON m.user_id = u.user_id
LEFT JOIN relations r ON r.following_id = m.user_id
WHERE m.user_id = {$user_id}
OR (r.follower_id = {$user_id} AND NOT IsNull(r.follower_id))
ORDER BY posted DESC
С моей точки зрения я бы потянул пользовательские данные по отдельности, сохранил их в массиве и обратился к ним по мере необходимости. Это должно быть лучше для производительности и, безусловно, будет проще.
select * from blog b, relations r
where b.user = $user_id or ( b.user = r.follower_id and r.following_id = $user_id )
order by posted desc;
Не уверен, изменил ли я последователь/следующий.