Question

I have a big problem with MySQL. I want to write script like facebook newsfeed. My query return me 27 the same records. I don't know why. How it works? Script displaying posts written by me, my friends or my profile.

My tables: users: id, firstname, lastname

friends: friend1, friend2, status, date

wall: update_id, author, to_profile, content, date, photos

My query:

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

I also want to display post written by pages which I liked. I created tables:

pages: page_id, page_name

page_likes: page_id, user_id, date

and *pages_wall:** like_id, page_id, user_id, date

How to connect this to my query? And (the most important) how to repair my query? Thanks in advance, Matthew

Was it helpful?

Solution

That's a lot of joining going on. Try using your JOINs just to connect the tables, and then use WHERE to cut down the results. Because as it stands, those ORs aren't working like you probably think they are, they need some () around them.

I think you need some structural changes to this database for it to work well in the future. I'd add an ID field to friends, even if just on the admin side, you're going to want to manage those records.

Also, you shouldn't be querying user.* in this query. It seems like you want to pull out every user setting... for every single wall post. This will get rid of "INNER JOIN users ON users.id = wall.author " at the end which will help. Get that information in it's on query prior to calling this wall display.

SELECT *
FROM users
WHERE users.id = wall.author 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top