Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用硬连接名称查询mysql_Php_Mysql - Fatal编程技术网

Php 使用硬连接名称查询mysql

Php 使用硬连接名称查询mysql,php,mysql,Php,Mysql,我需要你的帮助,这是我的问题: 我有两张桌子 Friends ---------------------------------------- friends_club_1 | friends_club_2 | state 1234 4321 1 2345 1234 1 1234 4567 1 4569 1567

我需要你的帮助,这是我的问题:

我有两张桌子

Friends
----------------------------------------
friends_club_1 | friends_club_2 | state
1234                 4321          1
2345                 1234          1
1234                 4567          1
4569                 1567          1



  User Info
  -----------------------------------------------
    id  |    name    |    surname     |    age   |
   2345     Jhonny         Jenny           24
   4567     Linda          Minda           23
   1567     Stefan         Refan           25
   1234     me             me              23
   4569     dani           mari            28
   4321     Star           Gate            24
我希望得到以下结果:

Result
-----------------------------------------------------
my_friends   | state |  name  | surname | age

4321           1        Star       Gate    24
2345           1        Jhonny    Jenny    24
4567           1        Linda     Minda    23
1567           1        Stefan    Refan    25

ecc.... 
我希望在知道me id 1234的情况下得到此结果
我希望有人能帮上忙,非常感谢你

我猜是这样的

SELECT UserInfo.*
FROM UserInfo
LEFT JOIN Friends ON (UserInfo.id IN (friends_club1, friends_club2))
WHERE UserInfo.id = 1234

给你

SELECT u.id AS my_friends  ,u.state,  u.name,  u.surname , u.age FROM user_info u
INNER JOIN friends f1(u.id = f1.friends_club_1)
INNER JOIN friends f2(u.id = f2.friends_club_2)
WHERE f1.friends_club_1=1234 OR  f2.friends_club_2=1234
或者通过子查询,您可以像

SELECT u.id AS my_friends  ,u.state,  u.name,  u.surname , u.age FROM user_info u
WHERE u.id IN(SELECT friends_club_1 FROM friends WHERE friends_club_2=1234) OR
u.id IN(SELECT friends_club_2 FROM friends WHERE friends_club_1=1234)
希望它有意义

注意:不要在列名和表名中使用空格


您可以使用
JOIN
将表链接在一起,并结合
UNION
处理这两种情况的朋友

SELECT uf.*, f.state
FROM User_Info u
INNER JOIN Friends f
  ON f.friends_club_1 = u.id
INNER JOIN User_Info uf
  ON uf.id = f.friends_club_2
WHERE u.id = 1234

UNION

SELECT uf.*, f.state
FROM User_Info u
INNER JOIN Friends f
  ON f.friends_club_2 = u.id
INNER JOIN User_Info uf
  ON uf.id = f.friends_club_1
WHERE u.id = 1234

你的结果不正确,“Stefan Refan”不会出现在结果中

SELECT UI.id AS my_friends,
       COALESCE(F1.state,F2.state) AS state,
       UI.name, UI.surname, UI.age
FROM [User Info] as UI
LEFT OUTER JOIN [Friends] AS F1 ON (UI.id = F1.friends_club_1)
LEFT OUTER JOIN [Friends] AS F2 ON (UI.id = F2.friends_club_2)
WHERE COALESCE(F1.friends_club_2,F2.friends_club_1) = 1234;

您需要合并F1.state和F2.state以找到所使用的状态。

根据您的期望结果
Stefan
应该在结果中,但在您的示例表中,他与
me
不是朋友。这是一个错误,还是您正在尝试获取朋友和朋友的朋友?谢谢,这是正确的查询,但是如果我想添加筛选器,只显示状态为1的结果,我如何才能做到这一点?我尝试过,但没有成功添加到WHERE部分
和COALESCE(F1.state,F2.state)=1
我发现现在有一个错误发现不是很好,当我在数据库中有更多相同的id时,有时无法显示正确的结果。您能澄清您得到的错误吗?当您有重复的ID时?