在这里,我发布了一个关于根据行中列的值进行JOIN的问题。
您需要创建一个添加好友功能,在该功能中,您将相互添加的两个用户的ID写入user_1_id
(我的ID)和user_2_id
(好友ID)。
如果您想查看自己与谁是朋友,请选择依赖user_1_id
或user_2_id
是否具有不同用户的ID(正在浏览的人)
我想出来,所以下面是您想要使用的查询,以备不时之需。
这是查询
$sql_inp = 'SELECT DISTINCT
users.id, users.first_name, users.last_name,
CASE
WHEN friends.user_2_id="'.$_SESSION[USER][id].'" //equal to current user id
THEN (SELECT friends.user_1_id FROM friends WHERE friends.user_2_id="'.$_SESSION[USER][id].'") // if user_2_id is My id, then fetch the other row
ELSE friends.user_2_id // obviously the opposite
END
FROM users
LEFT JOIN friends ON users.id= // this case is completely the same as one above
CASE
WHEN friends.user_2_id="'.$_SESSION[USER][id].'" THEN (SELECT friends.user_1_id FROM friends WHERE friends.user_2_id="'.$_SESSION[USER][id].'")
ELSE friends.user_2_id
END
WHERE friends.user_1_id="'.$_SESSION[USER][id].'" OR friends.user_2_id="'.$_SESSION[USER][id].'" // fetch the row where the either one of the values is equal to My id
';
希望如果有人遇到麻烦,这会有所帮助
答案 0 :(得分:1)
就个人而言,我讨厌使用CASE声明。它使查询看起来混乱。尝试使用IF function
$sql_inp = 'SELECT
table1.val1,table1.val2,
table2.val1,table2.val2,
IF(table3.val1="'.$user_id.'",table3.val1,
IF(table3.val2 ="'.$user_id.'",table3.val2,
IFNULL(table3.val2,-1))) users_fetch
FROM table1
INNER JOIN table2 ON table2.val1=table1.val1
LEFT JOIN table3 ON table2.val1=users_fetch';
在此查询中,如果table3.val1和table3.val2<> $ user_id,则users_fetch为-1。
试一试!!!