2013-02-10 5 views
12

Ich versuche, einige Zeilen aus der gleichen Tabelle zu bekommen. Es ist eine Benutzertabelle: Benutzer hat user_id und user_parent_id.INNER JOIN gleiche Tabelle

Ich brauche die Zeile user_id Zeile und user_parent_id Zeile. Ich habe so etwas codiert:

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] 

Aber es zeigt nicht die Ergebnisse. Ich möchte den Benutzerdatensatz und seinen übergeordneten Datensatz anzeigen.

Antwort

24

Ich denke, das Problem ist in Ihrem JOIN Zustand.

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] 

bearbeiten: Sie wahrscheinlich LEFT JOIN, wenn Benutzer ohne Eltern verwenden sollten.

+0

Vielen Dank allen für Ihre Eingabe .. ich nicht wirklich Eltern ID gesetzt haben beim Testen, jetzt seine Arbeits .. ein mehr Sache kann sein, es wird jemandem helfen, ich habe user_parents als TEXT im Format "1,2" gespeichert, also bedeutet es Details von 2 Benutzern .. so in diesem Szenario meine letzte Arbeitsabfrage ist unten: $ query = " Wählen Sie user.user_fname, user.user_lname, parent.user_lname AS plname, parent.user_fname AS pfname von {$ Präfix} Benutzer als Benutzer Join {$ Präfix} Benutzer als Eltern über parent.user_id IN (user.user_parents) wo user.user_id = ". $ ID; danke alle noch einmal .. – user1718343

+1

@ user1718343 Nie jemals ** EVER ** Trennzeichen Daten wie das in Spalten. –

1

Vielleicht sollte dies die Auswahl sein

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

Ihre Abfrage sollte funktionieren (wenn ich die Frage richtig verstanden habe), aber Sie haben den Alias ​​verwenden parent die Werte der übergeordneten Tabelle wie folgt zu zeigen:

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

Sie können auch UNION wie

verwenden
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

Ich weiß nicht, wie die Tabelle erstellt wird, sondern versuchen, diese ...

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