0

我对 MySQL 有一个大问题。我想编写像 facebook newsfeed 这样的脚本。我的查询返回了 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、日期

如何将此连接到我的查询?以及(最重要的)如何修复我的查询?在此先感谢,马修

4

1 回答 1

0

这是很多的加入。尝试使用您的 JOIN连接表,然后使用 WHERE 减少结果。因为就目前而言,这些 OR 并没有像你想象的那样工作,它们需要一些 () 围绕它们。

我认为您需要对该数据库进行一些结构更改,以便它在未来正常工作。我会向朋友添加一个 ID 字段,即使只是在管理方面,您也会想要管理这些记录。

此外,您不应该在查询中查询 user.*。似乎您想 为每个墙帖提取每个用户设置。这将在最后摆脱“INNER JOIN users ON users.id = wall.author”,这将有所帮助。在调用此墙显示之前,请在查询中获取该信息。

SELECT *
FROM users
WHERE users.id = wall.author 
于 2013-07-20T14:29:14.153 回答