2013-02-10 232 views
12

我想从同一张表中获取一些行。这是一个用户表:用户有user_iduser_parent_idINNER JOIN同一张表

我需要得到user_id行和user_parent_id行。我编码像这样:

SELECT user.user_fname, user.user_lname 
FROM users as user 
INNER JOIN users AS parent 
ON parent.user_parent_id = user.user_id 
WHERE user.user_id = $_GET[id] 

但它不显示结果。我想显示用户记录及其父记录。

回答

24

我认为问题出在您的JOIN条件。

SELECT user.user_fname, 
     user.user_lname, 
     parent.user_fname, 
     parent.user_lname 
FROM users AS user 
JOIN users AS parent 
    ON parent.user_id = user.user_parent_id 
WHERE user.user_id = $_GET[id] 

编辑: 你应该使用LEFT JOIN如果有用户没有父母。

+0

谢谢大家对您的输入.. 我居然没有必须父ID设置测试时,现在它的工作..一个更多的事情可能会帮助别人,我以“1,2”的格式将user_parents保存为TEXT,所以它意味着2个用户的详细信息..所以在这种情况下,我的最终工作查询如下: $ query =“ select user.user_fname,user.user_lname,parent.user_lname AS plname,parent.user_fname AS pfname 来自{$ prefix}用户,用户以 作为父母加入{$ prefix}用户parent.user_id IN(user.user_parents) 其中user.user_id =“。$ id; 再次感谢所有.. – user1718343 2013-02-10 11:33:00

+1

@ user1718343永远不会** ** EVER **存储像列中的分隔数据。 – 2016-10-26 21:49:15

1

也许这应该是选择(如果我理解正确的问题)

select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname 
... As before 
1

您的查询应该可以正常工作,但你必须使用别名parent显示这样父表的值:

select 
    CONCAT(user.user_fname, ' ', user.user_lname) AS 'User Name', 
    CONCAT(parent.user_fname, ' ', parent.user_lname) AS 'Parent Name' 
from users as user 
inner join users as parent on parent.user_parent_id = user.user_id 
where user.user_id = $_GET[id]; 
1

您还可以使用UNION像

SELECT user_fname , 
     user_lname 
FROM users 
WHERE user_id = $_GET[id] 
UNION 
SELECT user_fname , 
     user_lname 
FROM users 
WHERE user_parent_id = $_GET[id] 
0

我不知道如何该表创建,但试试这个...

SELECT users1.user_id, users2.user_parent_id 
FROM users AS users1 
INNER JOIN users AS users2 
ON users1.id = users2.id 
WHERE users1.user_id = users2.user_parent_id