1

車、ユーザー、訪問者の 3 つの MySQL テーブルがあります。

テーブルカーは、テーブルのユーザーまたはテーブルの訪問者に関連付けることができます。テーブル ユーザーと訪問者は異なるテーブル構造を持っています。これらすべてのテーブルを結合して個人データを取得したいと思います。現在、PHPを使用して個人データを取得しています。

これは、この種の関係を作成するのに最適なテーブル構造ですか?また、単一の MySQL クエリを使用して個人情報を取得する方法はありますか?

[車]
ID | 車名 | 人物タイプ | person_id
--------------+-------------+--------
1 | 1号車 | ユーザー | 1
2 | 2号車 | 訪問者 | 1

 [ユーザー]
ID | 名前
---+----------
1 | 人 1

 【来場者】
ID | ファーストネーム | 苗字
---+------------+----------
1 | 人 | 2
4

2 に答える 2

1

利用可能なオプションがいくつかあります。1つは投稿で言及されています。選択は次のようになります。

select * from
   cars a
   left join users u on (a.person_type='user' and a.person_id=u.id)
   left join visitors v on (a.person_type='visitor' and a.person_id=v.id)

もう 1 つのオプションは、 の代わりにperson_typeとのperson_id両方user_idを使用することvisitor_idです。どちらもヌル可能で、強力な外部キーを配置することもできます。選択は非常に似ています:

select * from
   cars a
   left join users u on (a.user_id=u.id)
   left join visitors v on (a.visitor_id=v.id)

users最後になりましたが、テーブルとvisitorsテーブルを 1 つのテーブルにマージできますか?

[cars]
  ID | car_name |  person_id
-----+----------+-------------
   1 | car 1    | 1
   2 | car 2    | 2

[persons]
  ID | type    | name
-----+---------+----------
   1 | user    | person 1
   2 | visitor | person 2

選択は非常に単純になります。

select * from cars c join persons p on (c.person_id=p.id)
于 2012-08-21T10:21:23.193 に答える
1

次のような外部結合を使用できます。

select
    a.ID,
    a.car_name,
    a.person_type,
    b.name as username,
    c.name as visotorName
from
    cars a
        left outer join users b
            on a.person_id=b.ID
        left outer join visitors c
            on a.person_id=c.ID

非常によく似た質問について、かなり詳細な回答を書きました。返される行数、および行ごとに返される内容に関して、必要な方法でデータを適切にフォーマットするために使用できる他の関数をいくつか示します。

于 2012-08-21T10:15:24.493 に答える