0

1対多の関係にある2つのデータベーステーブルがある架空のシナリオ。テーブルBからリンクされたすべての行のネストされた配列を使用して、テーブルAの各行を返すことができるように、優れたクエリ関数を見つけようとしています。

SELECT a.id AS id,a.name as name,b.id AS b_id,b.name AS b_name FROM a,b WHERE a.id=b.eid;

結果を1つだけ返します

SELECT 
    a.id AS id,
    a.name as name,
    GROUP_CONCAT(b.id) AS b_id,
    GROUP_CONCAT(b.name) AS b_name 
FROM a,b 
WHERE a.id = b.eid;

これは私が望むものを返しますが、私は文字列ではなく配列の後にあります(b.nameにコンマがあるかもしれません)

私は何が欠けていますか?

4

2 に答える 2

1

カンマとは異なる区切り文字を使用できます。

GROUP_CONCAT(b.name SEPARATOR ';') AS b_name
于 2010-11-01T22:18:57.767 に答える
1

MySQLデータ型以外のものを返すことはできないので、簡単な答えは、サブクエリから結果の配列(ネストされているかどうかに関係なく)を返すことはできないということです。また、外部から文字列連結値を構築しようとすると、かなり劇的なパフォーマンスヒットが発生します。サブ文字列の順序は暗黙的であり、ご存知のとおり、適切な区切り文字を選択する際に問題が発生します。

ほぼ確実に、単純なJOINを使用して単一の結果セットを作成する方が効率的です。関係の「一方」側の重複は、プログラムで処理する必要があります(これは、複数の連結フィールドでの文字列分割の処理よりも、何らかの意味で望ましい方法です)。

于 2010-11-01T22:20:13.760 に答える