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.
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.
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]
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
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];
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 table
Datentabelle, wobei primary key
column
dateid 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 key
column
colorid zugewiesen ist:
mysql> select * from colortable;
+---------+------------+
| colorid | colorvalue |
+---------+------------+
| 11 | blue |
| 12 | yellow |
+---------+------------+
2 rows in set (0.00 sec)
und unsere abschließenden drittentable
gemeinsam 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.
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