1

私はこの種のリレーショナルタイプのデータベース設計に不慣れです。この方法でデータベースを設計しました。しかし、私はこれJOINについてMySQLについてかなり混乱しています。このすべてのテーブルを結合するための私のクエリは何である必要がありますか。あなたが見ることができるならば、テーブルusersはすべてのテーブルの参照です。

ユーザー

+----------+----------------+-----------------+
| users_id | users_level_id | users_status_id |
+----------+----------------+-----------------+
|        1 |              1 |               1 |
|        2 |              2 |               1 |
+----------+----------------+-----------------+

users_credentials

+----------+---------------------------+-----------------------------+----------------------------+
| users_id | users_credential_username | users_credential_email      | users_credential_password  |
+----------+---------------------------+-----------------------------+----------------------------+
|        1 | super                     | super@gmail.com             | $5$e94e9e$vptscyHjm8rdX0j6 |
|        2 | admin                     | admin@gmail.com             | $5$fVuOmySyC0PttbiMn8in0k7 |
+----------+---------------------------+-----------------------------+----------------------------+

users_level

+----------------+-------------------------+
| users_level_id | users_level_description |
+----------------+-------------------------+
|              1 | Super Administrator     |
|              2 | Administrator           |
+----------------+-------------------------+

users_status

+-----------------+--------------------------+
| users_status_id | users_status_description |
+-----------------+--------------------------+
|               0 | Disabled                 |
|               1 | Enabled                  |
+-----------------+--------------------------+
4

5 に答える 5

2

これを試して

SELECT u.*, uc.*, ul.*, us.*
FROM users u 
INNER JOIN users_credentials uc
    ON u.users_id = uc.users_id
INNER JOIN users_level ul
    ON u.users_level_id = ul.users_level_id
INNER JOIN users_status us
    ON u.users_status_id = us.users_status_id

使用法に注意してくださいINNER JOIN:これは、ユーザーが結合されたテーブルに対応するレコードを持っていない場合、それが表示されないことを意味します。関連するテーブルのレコードが一致していなくてもすべてのユーザーを返す必要がある場合は、で変更INNER JOINしてLEFT JOINください。

ユーザーコメントの後に編集:
一部の列だけを返したい場合は、この例として定義します

SELECT uc.users_credential_username AS username, 
       uc.users_credential_email AS email, 
       uc.users_credential_password AS pwd, 
       ul.users_level_description AS level, 
       us.users_status_description AS status
于 2012-04-13T06:03:36.487 に答える
1

結合は、参照テーブルと外部キーの関係がある正規化されたテーブルからデータをフェッチするために使用されます。上記の結合付きテーブルの場合、参照テーブルを使用して2つのテーブル間でデータをフェッチできます。例えば

Select * from users a JOIN users_credentials b 
ON a.user_id=b.user_id JOIN users_level c 
ON c.users_level_id=a.users_level_id 
where users_credential_username='super';

このクエリの結果は、users_credential_username=superを持つユーザーのusers_level_descriptionのような詳細を提供します。

于 2012-04-13T06:21:43.950 に答える
1

これは次のように見えると思います:

SELECT * FROM users
LEFT JOIN user_credentials ON users.user_id = user_credential.user_id
LEFT JOIN user_level ON users.users_level_id = users_level.users_level_id

等々..

于 2012-04-13T06:04:47.557 に答える
1

これは、それらすべてを結合する単純なクエリです

select *
from users
  left join users_credentials
    on users_credentials.users_id = users.users_id
  left join users_level
    on users_level.users_level_id = users.users_level_id
  left join users_status
    on users_status.users_status_id = users.users_status_id

編集

異なるテーブルユーザーからデータを取得する場合は、これを使用します

select users.* , users_credentials.* , users_level.* , users_status.*
from users
  left join users_credentials
    on users_credentials.users_id = users.users_id
  left join users_level
    on users_level.users_level_id = users.users_level_id
  left join users_status
    on users_status.users_status_id = users.users_status_id
于 2012-04-13T06:06:10.817 に答える
1

このタイプのクエリを使用します....

SELECT c.*, l.*, s.*
FROM users AS u
INNER JOIN users_credentials AS c ON (u.users_id = C.users_id)
INNER JOIN users_level AS l ON (u.users_level_id= l.users_level_id)
INNER JOIN users_status AS s ON (u.users_status_id= s.users_status_id)

.* で必要なフィールドを指定できる場所 ...

于 2012-04-13T06:07:41.793 に答える