2017-01-26 2 views
0

Мне нужна помощь с моим кодом запроса mysql! У меня есть три базы данных, и я пытаюсь найти способ опубликовать данные из всех трех.3 таблицы в одном запросе mysql?

users 
 
---------------------------------- 
 
user_id username  email..etc 
 
----------------------------------- 
 
1   username 
 
----------------------------------- 
 

 

 
friends_db 
 
------------------------------------- 
 
user_id friend_id friend_active 
 
-------------------------------------- 
 
    1   2    1 
 
-------------------------------------- 
 

 

 
posts 
 
------------------------------------- 
 
post_id user_id  post_content 
 
------------------------------------- 
 
1   1    this is a post 
 
--------------------------------------

То, что я хотел бы сделать, это сделать список друзей, где вы можете увидеть все сообщения, которые ваши друзья (те, у кого есть 1 в friend_active) сделали сообщения.

моя функция:

function getFriendsPosts() 
{ 

    require "config.php"; 

    $friends = $c->query ("SELECT * FROM friends_db WHERE user_id=" . $_SESSION["user_id"] ." AND friend_active = 1") ; 

    if ($friends->num_rows > 0) 
    { 

     while($row = $friends->fetch_assoc()) 
     { 
      $postData[] = array("user_id" => $row[ "user_id" ], "friend_active" => $row[ "friend_active" ], "friend_id" => $row[ "friend_id" ]); 
     } 
    } else { 
     echo "No Data To Show"; 
    } 

    return $postData; 

} 

У меня есть:

$friends = $c->query ("SELECT * FROM friends_db WHERE user_id=" . $_SESSION["user_id"] ." AND friend_active = 1") ; 

, который дает мне user_id из тех, кто имеет friend_active = 1

однако я не знаю, как расширить это, связав friend_id со своим собственным user_id, чтобы получить свое имя пользователя, в котором затем будут отображаться их сообщения.

Возможно, я слишком усложняю это, или я, возможно, не так, я не знаю. Кто-нибудь знает, как я могу сделать это в том же формате, что и я уже сделал (у меня есть другие вещи, работающие в этом формате, и мне нужно, чтобы это тоже было)? Или, возможно, есть совет?

Edit:

$friends = getFriendsPosts(); 

foreach ($friends as $friend) { 
    ?> 
    <div class="ui-corner-all custom-corners"> 
    <div id="searchpost"> 
    <?php 


    echo $friend['user_id']; 
    echo $friend['friend_id']; 
    echo $friend['friend_active']; 


    ?> 
    </div> 
    </div> 
    <?php 
} 
?> 

Id, как к:

эхо пользователя (по отношению к friend_id/Thier собственный идентификатор пользователя) эхо разместить данные (по отношению к user_id)

ответ

1

Я принимаю friends_db часть вашего запроса на самом деле является таблицей friends? Я также предполагаю, что между этими таблицами существует связь:

Если да, то вы можете использовать присоединиться:

select * from friends as f 
join users as u on u.user_id = f.user_id 
join posts as p on p.user_id = f.user_id 
where f.user_id = ... 

В качестве альтернативы, чтобы получить POST ваших друзей:

select * from posts as p 
join users as u on u.user_id = p.user_id //gets users table where related to posts 
join friends as f on f.user_id = p.user_id //gets friends where related 
join users as fu on fu.user_id = f.friend_id //gets users table where related to friend user_id 
where u.user_id = ....//the sources user_id 
+0

Да, я пытаюсь отобразить сообщения (в базе данных сообщений), сделанных пользователями (в базе данных пользователей), которые являются вашими друзьями (в базе данных друзей). Я могу поместить имя пользователя в базу данных друзей, чтобы сузить его до двух таблиц для доступа, но в любом случае у меня возникают проблемы с объединением двух баз данных. Я не слишком хорошо знаком с кодом, который вы мне дали, не могли бы вы объяснить это мне, чтобы я мог добавить его для базы данных постов? Спасибо :) –

+0

см. Правки. Это своего рода неопределенный вопрос в ретроспективе. Вы публикуете друзей определенного идентификатора? – Kisaragi

+0

Отредактировано тем, что у меня есть на моем индексе, чтобы опубликовать. :) –

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