0

UNION ALL を使用して、構造がまったく同じ 3 つのテーブルの列をクエリしています。

 $sql="
(SELECT col1 FROM table1 WHERE col2 IN ('a','b','c') and col3 IS NOT NULL)
UNION ALL
(SELECT col1 FROM table2 WHERE col2 IN ('a','b','c') and col3 IS NOT NULL)
UNION ALL
(SELECT col1 FROM table3 WHERE col2 IN ('a','b','c')  and col3 IS NOT NULL)
";

次に、PDO を使用してそのステートメントを準備し、実行します

$stmt = $pdo->prepare($sql);
$stmt->execute();   
$var = $stmt->fetchAll(PDO::FETCH_ASSOC);

私の問題は、配列が生成されることです: $var、整数キーを使用し、各結果をサブ配列に分割します。各テーブルからの結果が、できればテーブル名をキーとして、独自のサブ配列にある必要があります。

だから現在:

print_r($var); 与えます:

Array 
    (
    [0] => Array ( [col1] => asd) 
    [1] => Array ( [col1] => sdf) 
    [2] => Array ( [col1] => dfg) 
    [3] => Array ( [col1] => fgh)
    )

をお願いします:

Array 
   (
[table1] => Array 
    (
     [0] => Array ( [col1] => asd) 
     [1] => Array ( [col1] => sdf) 
    )

[table2] => Array 
    (
     [0] => Array ( [col1] => asd)      
    )

[table3] => Array 
    (
     [0] => Array ( [col1] => asd)      
    )

    )
4

1 に答える 1

1

単一のクエリでそれを行うことはできませんが、AS キーワードを使用して、列名に対応するテーブル名をプレフィックスとして付けることができます。その後、配列を前処理して、仕様に似たものを作成する必要があります。

于 2013-02-18T06:57:55.880 に答える