2013-07-20 3 views
0

У меня большая проблема с MySQL. Я хочу написать сценарий, как лента новостей facebook. Мой запрос вернет мне 27 таких же записей. Я не знаю почему. Как это работает? Сценарий, отображающий сообщения, написанные мной, моими друзьями или моим профилем.Одна запись 27 раз

Мои таблицы: пользователей: ID, FirstName, LastName

друзей: friend1, friend2, статус, дата

стены: update_id, автор, to_profile, содержание , дата, фотографии

Мой запрос:

SELECT wall.update_id, wall.author, wall.to_profile, wall.content, wall.date, wall.photos, users.*, friends.sender_id, friends.friend_id, friends.status 
FROM 
    wall 
INNER JOIN friends ON 
    wall.author = friends.sender1 
    AND friends.friend2 = '".$_SESSION['id']."' 
    AND friends.status = '1' OR wall.author = '".$_SESSION['id']."' 
    OR wall.to_profile = '".$_SESSION['id']."' 
INNER JOIN users ON users.id = wall.author 
ORDER BY wall.date DESC 

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

страницы: PAGE_ID, PAGE_NAME

page_likes: PAGE_ID, user_id, дата

и * pages_wall: ** like_id, page_id, user_id, дата

Как подключить это к моему запросу? И (самое главное), как отремонтировать мой запрос? Заранее благодарен, Matthew

ответ

0

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

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

Кроме того, вы не должны запрашивать пользователя. * В этот запрос. Кажется, что вы хотите вытащить каждую пользовательскую настройку ... для каждого стенного сообщения. Это избавит вас от «INNER JOIN users ON users.id = wall.author» в конце, который поможет. Получите эту информацию в запросе до вызова этого настенного дисплея.

SELECT * 
FROM users 
WHERE users.id = wall.author