Получать результаты из моих собственных и "друзей" сообщений - PullRequest
0 голосов
/ 26 июня 2009

У меня есть проблема, которую я сам не могу понять. Я пытался использовать левое соединение и т. Д., Но ничего не работает. Я использую 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

Швеция

Ответы [ 3 ]

0 голосов
/ 26 июня 2009

Как насчет?

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}
                    );
0 голосов
/ 26 июня 2009

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

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;

Не уверен, что я поменял подписчика / подписчика.

0 голосов
/ 26 июня 2009

Попробуйте это?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...