0

我正在通过 UNION ALL 查询三个结构相同的表中的列

 $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 回答