不同表的SQL问题

时间:2014-01-05 20:12:12

标签: sql

这里的第一个问题,如果我是密集的,请道歉。 我有一个用户表和一个friendslink表,并希望从用户id =用户表中选择* 这是我的SQL:

SELECT * 
FROM user
INNER JOIN FriendsLink 
ON user.usr_ID=FriendsLink.ub_lnkID1 
ON user.usr_ID=FriendsLink.ub_lnkID2
WHERE usr_ID =" .  $_SESSION['usr_ID']

我可能比我想象的更密集 - 或者我没有正确地说出我的问题...查询需要返回与ub_lnkID1或ub_lnkID2中出现的任何用户有关的所有详细信息会话ID出现在相应的ub_lnkID字段中。

2 个答案:

答案 0 :(得分:1)

SELECT * 
FROM user INNER JOIN FriendsLink 
ON user.usr_ID=FriendsLink.ub_lnkID1 
AND user.usr_ID=FriendsLink.ub_lnkID2  --<-- This can be `AND` or `OR` depending  
WHERE usr_ID =  --<-- Your value          -- on you requirement

答案 1 :(得分:0)

而不是两个'on'stantements,你需要一个'和'或'或'取决于你想要的东西。

SELECT * 
FROM user
INNER JOIN FriendsLink 
ON user.usr_ID=FriendsLink.ub_lnkID1 
  OR user.usr_ID=FriendsLink.ub_lnkID2
WHERE usr_ID =" .  $_SESSION['usr_ID'] .""

但你确定你的逻辑吗? user.usr_ID会同时等于FriendsLink.ub_lnkID1和FriendsLink.ub_lnkID2吗?也许你正在寻找'或'......

sql的工作方式是每个'join'语句只有一个'on',但是,你可以使用'and'和'或'语句使'on'变得像你需要的那样复杂。

编辑:

好的,要获取朋友的用户信息,最好这样做:

"SELECT user.* 
FROM user
JOIN FriendsLink
  ON user.usr_ID=FriendsLink.ub_lnkID1 
  OR user.usr_ID=FriendsLink.ub_lnkID2
WHERE FriendsLink.ub_lnkID1 = ".$_SESSION['usr_ID'] ."
  OR FriendsLink.ub_lnkID2 = ".$_SESSION['usr_ID'] ."
GROUP BY user.usr_ID"

添加了组,以便您不会两次获得同一位朋友。您只需要更改用户为朋友时的选择位置。