2

データベースには、次のように大まかに配置された2つのテーブルがあります

クライアント

id |  other data
1  |  data 1
2  |  data 2
3  |  data 3
4  |  data 4

配属された従業員

id  | clientid | employee
1   | 1        | Fred
2   | 1        | Jim
3   | 3        | Peter
4   | 4        | Fred
5   | 4        | Peter
6   | 4        | James

従業員テーブルからすべての従業員レコードを含むクライアント テーブルを返す方法はありますか? 理想的には、行の ID と従業員名の両方が必要なので、GROUP_CONCAT を使用して複数の列を収集することはできないと思います。また、employee テーブルに各クライアントのエントリが常に存在するという保証もないため、それらのクライアントに対して空/null の結果を返す必要があります。

これまでにphpでこれを取得するために2つの方法を試しましたが、どちらも何らかの方法でかなり非効率的です。

(A) 1 つ目は、最初の接続の途中で新しいデータベース接続を効果的に作成して、そのクライアント ID に関連付けられた従業員のリストを返すことでしたが、明らかに、1 つのクエリに対してかなりの数のデータベース接続が作成されます。

(B) 2 つ目は、コードの先頭で従業員テーブル全体を配列に取り込み、その配列を検索してそのクライアント ID に関連する行を引き出し、そこに従業員名と行 ID を含めることでした。かなり大きな配列がphpに即座にダンプされることになります。

単一の SQL クエリを使用してこれを引き出す方法はありますか? 反対側のphpでデータを並べ替えることができると確信しているので、データがどのように出力されるかについてはそれほど大騒ぎしているわけではありませんが、おそらく次のようなものです

結果

id |  other data | employees
1  |  data 1     | 1,Fred;2,Jim
2  |  data 2     | 
3  |  data 3     | 3,Peter
4  |  data 4     | 4,Fred;5,Peter;6,James

これがどこかで以前に尋ねられた場合は、申し訳ありませんが、先週少し調べてみましたが、あまり役に立ちませんでした。

4

1 に答える 1

0
SELECT e.*, c.other_data FROM Employee e
INNER JOIN Client c ON e.client_id = c.id

したがって、最終的に得られるのは、1 つのクエリで取得された両方のテーブルからのすべての情報です。したがって、データは次のようになります。

     id        client_id    Employee    other_data
     1             1          Fred        data 1
     2             1          Jim         data 1
     3             3          Peter       data 3
     4             4          Fred        data 4
     5             4          Peter       data 4
     6             4          James       data 4
于 2012-09-30T12:16:24.890 に答える