2013-02-10 236 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