2015-11-21 5 views
0

Я строил сайт, как социальную сеть.Запросы веб-сайта продвинутые

И я сделал 3 стола: users, posts и friends.

Как я могу написать код для отображения сообщения от меня и от моих друзей: Users: id, email, username, password, image

Posts: id, pid, pname, ppost, pimage

Friends: id, user1, user2, friends(yes or no)

Поэтому мне нужно проверить, если user1 составляет $ _SESSION [пользователь], чем тоже проверяйте каждую строку с друзьями как «да» и «эхо» каждый пост от пользователя1 (меня) и других пользователей, которые мои друзья.

Я сделал несколько кодов, но это сообщения эха только от меня и первого пользователя, я отмечен как друг, я не могу показать сообщения от других пользователей, которых я отметил как друг.

пользователей: ID: 1 электронная почта: [email protected], имя пользователя: тест, пароль: XD, изображение: Это ссылка

Пользователи: ID: 2, электронная почта: [email protected], имя пользователя: test2, пароль: XD, изображение: Ссылка

пользователей: ID: 3, электронная почта: [email protected], имя пользователя: tEST3, пароль: XD, изображение: Ссылка

Сообщений: ID: 1, (PID это идентификатор издателя): etc 1,2,3, pname: имя издателя, ppost: текст, изображение: изображение издателя:

Так что представьте себе, что у меня есть 3 сообщения fr om 3 разных пользователя

Друзья: id: (auto) 1,2,3,4, user1 (user1 является пользователем сеанса), если я вхожу в систему для первого пользователя, это будет 1, user2 (идентификатор другого пользователя, такого как 2 (test2)), друзья (да)

Друзья: id: (авто) 1,2,3,4, user1 (user1 является пользователем сеанса), если я вхожу в систему для первого пользователя, он будет 1, user2 (id другого user like 3 (test3)), друзья (да)

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

Я сделал это до сих пор: Querys:

`session_start(); 
$res=mysql_query("SELECT * FROM users WHERE id=".$_SESSION['user']); 
$row=mysql_fetch_array($res); 
$res2=mysql_query("SELECT * FROM posts WHERE pid=".$_SESSION['user']); 
$row2=mysql_fetch_array($res2); 

$res3=mysql_query("SELECT * FROM obavijesti"); 
$row3=mysql_fetch_array($res3); 

$res5=mysql_query("SELECT user1, user2 FROM osobe WHERE friends='yes' AND user1='$_SESSION[user]' order by id limit 5000"); 

$row5=mysql_fetch_array($res5); 
$user2=$row5['user2']; 
$user1=$_SESSION['user']; 

` 

PHP скрипт:

<?php $result = mysql_query("SELECT * FROM posts WHERE pid='$user1' OR pid='$user2' order by id desc limit 5000") ?> 

<div class="publishcontent"> 
 
    <link rel="stylesheet" type="text/css" href="testt.css"> 
 
<div class="posts"> 
 
    <article class="post"> 
 
    <header class="post-header"><span class="post-user-name"><?php echo $row4['pname']; ?></span><span class="post-header-posted">Objavljeno: Danas</span></header> 
 
    <div class="post-flex-container"> 
 
     <aside class="post-user"> 
 
     <image src="<?php echo $row4['pimage']; ?>" class="post-user-image"></image> 
 
     <div class="post-user-status is-online">TEST</div> 
 
     <div class="post-user-posts">Broj objava: x</div> 
 
     <div class="post-user-joined"><?php if($row['spol'] == "zensko") { 
 

 
      echo "Pridružila se"; 
 

 
      } 
 
      else { 
 
echo "Pridružio se"; 
 
      } ?> : <?php echo $row['date']; ?></div> 
 
     </aside> 
 
     <section class="post-content"> 
 
    
 
    
 
     <p> 
 

 
     <?php echo htmlspecialchars($row4['ppost']); ?> 
 
    </p> 
 
     </section> 
 
    </div> 
 

 
    </article> 
 

 
</div> 
 

 
</div>

<?php endwhile ?> 

И он отображает только сообщения от меня и от первого лица я помеченное как друг, но не показывать сообщения от третьего лица

ответ

0

enter image description here

Я хотел бы вернуться к вашему MySQL и реорганизовать схему базы данных. В таблице «Ваши пользователи» должно быть отношение «один-много» к user_id в таблице «Друзья».Кроме того, таблица «Ваши пользователи» также должна иметь отношение друг к другу с friend_id в таблице «Друзья». (это позволяет вам сохранять user_id друга и user_id подружившихся.) Таблица пользователей также будет иметь отношение «один к многим» с таблицей «Сообщения». Затем измените свой mysql, чтобы использовать внутренний запрос соединения. Запрос внутреннего соединения позволит вам запрашивать все результаты из каждой таблицы с одним запросом. Вот ссылка, чтобы узнать больше об этом. http://www.w3schools.com/sql/sql_join_inner.asp

SELECT users.*, friends.*, posts.* FROM users INNER JOIN friends ON users.id = friends.user_id INNER JOIN posts ON users.id = posts.user_id 

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

+0

Но моя таблица пользователей, как это: ид, user1, user2 , друзья 1, 1, 2, yes 2, 1,3, yes 3, 2,3, yes Если у меня то, что я хочу, я еще не изучил внутреннее соединение, если бы вы могли отправить мне ссылку , и что вы имеете в виду от многих до многих отношений. И знаете ли вы, как я могу проверить, является ли user1 другом с user2 и user3, (User1 = 1, User2 = 2 user3 = 3, bcs - это идентификатор из таблицы пользователей), причем этот код над ним отображает только сообщения от user1 (me) (bcs я вошел в систему) и user2, но не user3 – PHPSelfLearning

+0

Я пересмотрел свой ответ, чтобы помочь вам –

+0

Спасибо, я попробую :) – PHPSelfLearning

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