Continuing this question,
in my web app, I want to allow users to add friends, like facebook, in my previous question, I finally decided to have the database structure as @yiding said:
I would de-normalize the relation such that it’s symmetric. That is,
if 1 and 2 are friends, i’d have two rows (1,2) and (2,1).The disadvantage is that it’s twice the size, and you have to do 2
writes when forming and breaking friendships. The advantage is all
your read queries are simpler. This is probably a good trade-off
because most of the time you are reading instead of writing.This has the added advantage that if you eventually outgrow one
database and decide to do user-sharding, you don’t have to traverse
every other db shard to find out who a person’s friends are.
So, now if user 1 adds user 2, and user 5 adds 2, something like this will go into the db:
ROW_ID USER_ID FRIEND_ID STATUS
1 1 2 0
2 2 1 0
3 5 2 0
4 2 5 0
As you see, we insert the row of the “REQUEST SENDER” first, so now imagine that user 5 is logged in, and we want to show him the friendship requests, here is my query:
$check_requests = mysql_query("SELECT * FROM friends_tbl WHERE FRIEND_ID = '5'");
the above query, will fetch ROW_ID = 4, this means with the above query shows us that user 2 has added 5, but he has NOT, actually the user 5 added user 2, so here we should not show any friendship requests for user 5, instead we need to show it for user 2.
How I’m supposed to check this correctly?
This is an edited answer.
Your SQL query should look like this:
Then you have to parse your result in this way. Assuming you have got a php array like this:
You just have to get the even rows:
Then you will have an array like this:
Alternative method: Make your SQL look like this:
That’s all.