2015-01-29 4 views
1

Я пытаюсь изменить ленту новостей моего пользователя, чтобы показывать только сообщения от друзей, а не от всех пользователей на сайте. Мне удалось сделать это примерно так:Сравнение столбцов из нескольких таблиц в одном запросе PHP/SQL

function friend_posts(){ 
global $session_user_id; 
if(friends_exist($session_user_id) === true){ 
    $friends = mysql_query("SELECT * FROM `friendship` WHERE `user_id` = $session_user_id AND `pending` = 0"); 
    while($friend = mysql_fetch_array($friends)){ 
      $friendID = $friend['friend_id']; 
      $posts = mysql_query("SELECT * FROM `posts` WHERE `userid` = $friendID ORDER BY `timestamp` DESC"); 
      while($post = mysql_fetch_array($posts)){ 
       $friendData = user_data($post['userid'],'username','first_name','last_name'); 
       echo $friendData['username'].": ".$post['status']."<br>"; 
      } 
     } 
    } else { 
    echo "Nothing to display. Try adding some friends!"; 
    } 
} 

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

Я предполагаю, что единственный путь, который я могу сделать, - это доступ к столбцам из нескольких таблиц, а затем сортировка по timestamp, которая хранится в таблице posts. Таблица friendship имеет только id, user_id, friend_id и pending.

Как бы я это сделал? Есть ли более простой способ сделать то, что я пытаюсь сделать?

Я очень новичок в SQL. Я не знаю слишком много, кроме вставки/удаления/обновления.

ответ

1

Вы можете использовать один оператор, как это:

SELECT * FROM posts WHERE userid in 
(SELECT friend_id FROM friendship WHERE user_id = $session_user_id AND pending = 0) 
ORDER BY `timestamp` DESC 

Таким образом, вы получите только сообщения друзей текущего пользователя. Если вам также нужны данные из таблицы friendship, используйте join.

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