wake-up-neo.com

INNER JOIN gleiche Tabelle

Ich versuche, einige Zeilen aus derselben Tabelle zu bekommen. Es ist eine Benutzertabelle: Benutzer hat user_id und user_parent_id

Ich muss die user_id-Zeile und user_parent_id-Zeile abrufen. 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]

Die Ergebnisse werden jedoch nicht angezeigt. Ich möchte den Benutzerdatensatz und seinen übergeordneten Datensatz anzeigen.

17
user1718343

Ich denke, das Problem liegt 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 sollten LEFT JOIN verwenden, wenn Benutzer ohne Eltern vorhanden sind.

30
Ronnis

Sie können auch UNION gerne 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]
1
Prashant16

Vielleicht sollte dies die Auswahl sein (wenn ich die Frage richtig verstanden habe)

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

Ihre Abfrage sollte gut funktionieren, aber Sie müssen den Alias ​​parent verwenden, um die Werte der übergeordneten Tabelle wie folgt anzuzeigen:

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
Mahmoud Gamal

Versuchen wir, diese Frage mit einem guten und einfachen Szenario mit 3 MySQL Tabellen zu beantworten, d. H. Datentabelle, colortable und zusammenstellbar.

first siehe Werte von tableDatentabelle, wobei primary keycolumndateid zugewiesen ist:

mysql> select * from datetable;
+--------+------------+
| dateid | datevalue  |
+--------+------------+
|    101 | 2015-01-01 |
|    102 | 2015-05-01 |
|    103 | 2016-01-01 |
+--------+------------+
3 rows in set (0.00 sec)

gehen Sie jetzt zu unseren secondtable-Werten colortable, wobei primary keycolumncolorid zugewiesen ist:

mysql> select * from colortable;
+---------+------------+
| colorid | colorvalue |
+---------+------------+
|      11 | blue       |
|      12 | yellow     |
+---------+------------+
2 rows in set (0.00 sec)

und unsere abschließenden drittentablegemeinsam verwendbar haben noprimary keys und die Werte sind:

mysql> select * from jointable;
+--------+---------+
| dateid | colorid |
+--------+---------+
|    101 |      11 |
|    102 |      12 |
|    101 |      12 |
+--------+---------+
3 rows in set (0.00 sec)

Jetzt Unsere Bedingung ist, die Dateid's zu finden, die sowohl Farbe Werte blue als auch yellow haben.

Unsere Frage lautet also:

mysql> SELECT t1.dateid FROM jointable AS t1 INNER JOIN jointable t2
    -> ON t1.dateid = t2.dateid
    -> WHERE
    -> (t1.colorid IN (SELECT colorid FROM colortable WHERE colorvalue = 'blue'))
    -> AND
    -> (t2.colorid IN (SELECT colorid FROM colortable WHERE colorvalue = 'yellow'));
+--------+
| dateid |
+--------+
|    101 |
+--------+
1 row in set (0.00 sec)

Hoffe, das würde vielen helfen.

0
ArifMustafa

Ich weiß nicht, wie der Tisch erstellt wird, aber probiere es aus ...

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
0
ioses