2012-05-08 5 views
0

Будучи новичком, я немного потерял, как прибить это. Я пытаюсь присоединиться к трем таблицам. Это структура таблицы:Как присоединиться к трем таблицам и добавить оператор «И»?

Accounts Table: 

1) id 
2) User_id (Id given to user upon sign up) 
3) Full_name 
4) Username 
5) Email 
6) Password 

Contacts Table: 

1) My_id (This is the user who added friend_id) 
2) Contact_id (this is the contact who was added by my_id) 
3) Status (status of relationship) 

Posts Table: 

1) Post_id 
2) User_posting (this is the user who posted it) 
3) Post_name 
4) User_allowed (this is where its specified who can see it) 

Вот структура кода у меня есть:

<?php 

$everybody = "everybody"; 
$sid = "user who is logged in."; 

$sql = <<<SQL 
SELECT DISTINCT contacts.contact_id, accounts.full_name, posts.post_id, posts.post_name 
FROM contacts, accounts, posts 
WHERE 
    (contacts.my_id = '$sid' 
     AND contacts.contact_id = accounts.user_id) 
    OR (contacts.my_id = '$sid' 
     AND contacts.contact_id = accounts.user_id) 
    OR (posts.user_posting = '$sid' 
     AND contacts.contact_id = accounts.user_id 
     AND posts.user_allowed = '$everybody') 
    OR (posts.user_id = '$sid' 
    AND contacts.user_id = accounts.user_id 
    AND posts.user_allowed = '$everybody') 

LIMIT $startrow, 20; 


$query = mysql_query($sql) or die ("Error: ".mysql_error()); 

$result = mysql_query($sql); 

if ($result == "") 
{ 
echo ""; 
} 
echo ""; 


$rows = mysql_num_rows($result); 

if($rows == 0) 
{ 
print(""); 

} 
elseif($rows > 0) 
{ 
while($row = mysql_fetch_array($query)) 
{ 

$contactid = htmlspecialchars($row['contact_id']); 
$name = htmlspecialchars($row['full_name']); 
$postid = htmlspecialchars($row['post_id']); 
$postname = htmlspecialchars($row['post_name']); 

// If $dob is empty 
if (empty($contactid)) { 

$contactid = "You haven't added any friends yet."; 
} 


print("$contactid <br>$postname by $name <br />"); 
} 

} 

Проблема заключается в том, что запрос показывает мне мои сообщения плюс все сообщения от друзей.

Что я делаю неправильно?

+0

Вы должны использовать правильный синтаксис 'JOIN'. Каков ваш ожидаемый результат? – Matthew

+0

Какой результат вы ожидаете? – Travesty3

+0

Что не так с вашим выходом? Чего ожидать? – Paul

ответ

1

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

$everybody = "everybody"; 
$sid = user who is logged in. 

$sql = "SELECT a.User_id, a.Full_name, p.Post_id, p.Post_name 
FROM posts p 
INNER JOIN accounts a ON a.User_id = p.User_posting 
INNER JOIN contacts c ON c.My_id = '$sid' AND c.Contact_id = a.User_id 
WHERE p.User_allowed = '$everybody' 
LIMIT $startrow, 20"; 

EDIT: Объясняя запрос ,

  1. Запрос SELECT сек определенные поля используются для вывода
  2. FROMposts таблицы, так как результат должен содержать строку для каждого сообщения.
  3. Это базовая таблица JOIN редактор с accounts таблицы, чтобы получить данные пользователя проводки и
  4. дополнительно JOIN редактор с contacts стол, чтобы мы могли фильтровать только бы разместить пользователей, которые также являются друзьями, добавленные пользователем в вопросе.
  5. Дополнительный фильтр находится на допустимом значении и
  6. для целей разбивки на страницы у нас есть смещение, определяемое $startrow.
+0

Итак, завершающая сессия отладки прекращается. – casperOne

+0

как просмотреть предыдущие комментарии? Мне нужны они, чтобы помочь моему запросу. – ariel

1

Должно быть, как это (не тщательно проверено):

SELECT DISTINCT contacts.contact_id, 
       accounts.full_name, 
       posts.post_id, 
       posts.post_name 
FROM contacts 
INNER JOIN accounts ON accounts.id = contacts.id 
INNER JOIN posts ON posts.User_posting = accounts.id /* (where'd get posts.user_id btw) */ 
WHERE contacts.my_id = $sid 
     AND posts.user_allowed = $everybody 
LIMIT $startrow, 20 
+0

Эй, я попробовал ваш, и он говорит об ошибке: Неизвестный столбец «accounts.id» в разделе «on» – ariel

+0

У вас нет поля id в таблице учетных записей? Могли бы вы предоставить свою структуру db? –

+0

да, я ... но его вне меня, почему он его не обнаружил. структура db - это то, что я написал выше. – ariel

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