同じテーブルからいくつかの行を取得しようとしています。ユーザーテーブルです。ユーザーにはuser_id
とuser_parent_id
があります。
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]
しかし、結果は表示されません。ユーザーレコードとその親レコードを表示したい。
問題は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
親のないユーザーがいる場合。
次のように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]
3つのMySQL
テーブル、つまりdatetable、colortableおよび-を使用して、この簡単なシナリオでこの質問に答えてみましょう。 jointable。
firsttable
の値を参照datetable with primary key
に割り当てられたcolumn
dateid:
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)
secondtable
values colortable with primary key
に割り当てられたcolumn
colorid:
mysql> select * from colortable;
+---------+------------+
| colorid | colorvalue |
+---------+------------+
| 11 | blue |
| 12 | yellow |
+---------+------------+
2 rows in set (0.00 sec)
最後のthirdtable
jointable have noprimary keys
および値は次のとおりです。
mysql> select * from jointable;
+--------+---------+
| dateid | colorid |
+--------+---------+
| 101 | 11 |
| 102 | 12 |
| 101 | 12 |
+--------+---------+
3 rows in set (0.00 sec)
Now私たちの条件はdateid'sを見つけることです-color値blueおよびyellow。
したがって、クエリは次のとおりです。
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)
これが多くの人の助けになることを願っています。
おそらくこれが選択されるはずです(質問を正しく理解している場合)
select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname
... As before
テーブルの作成方法がわかりませんが、これを試してみてください...
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
クエリは正常に動作するはずですが、エイリアス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];