Получайте результаты из своих и постов друзей

0

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

Швеция

Теги:
join

3 ответа

0
Лучший ответ

Как насчет?

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
    Когда я изменился, это сработало как чудо: где follow_id = {$ user_id}, где follower_id = {$ user_id} Теперь он работает и показывает все в phpmyadmin, но когда я пытаюсь вывести его на экран, то работают только данные из таблицы "microblog" , если я например использую echo $ mblog-> username; в цикле foreach это не работает, я получаю: Неопределенное свойство: mBlog :: $ username in ....... но оно должно быть там?
  • 0
    @Tobias: упс, да, я имел в виду последователя там ... :) Вы говорите, что $ mblog-> title работает, но $ mblog-> username терпит неудачу? Можете ли вы опубликовать код, который вы используете там?
Показать ещё 4 комментария
0

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

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
  • 0
    Это помогает мне перечислять мои собственные сообщения и моих друзей, но я также хочу перечислить, кто их написал. Так что мне нужно получить имя пользователя из таблицы пользователей также
  • 0
    Там. Это работает?
0

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

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;

Не уверен, изменил ли я последователь/следующий.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню