2009-10-24 159 views
1

我有一个sql语句是几个查询的联合。UNION ALL是否返回一个数组?

"SELECT a, b, c, 'd' as type FROM x WHERE id = $id UNION ALL 
SELECT a, b, c, 'e' as type FROM y WHERE id = $id UNION ALL 
SELECT a, b, c, 'f' as type FROM z WHERE id = $id ORDER BY a DESC LIMIT 10"; 

我尝试通过结果进行迭代,并得到各行“A”值,但不能让它的工作。

for($i = 0 ; $i < mysql_num_rows($result) ; $i++){ 
    $row = mysql_fetch_assoc($result); 
    echo($row['a']); 
} 

我知道这是一个愚蠢的问题,但我被卡住了。 有什么想法吗? 谢谢!

+0

检查是否var_dump($ row instanceof Traversable);'是否为真! – sepehr 2009-10-24 01:04:46

回答

0

你复制/粘贴你的代码或重新输入它?

$row = mysql\_fetch\_assoc($**g**uery); 

试想想起来了,你应该叫mysql\_fetch\_assoc一个结果句柄,而不是一个查询。

+0

我重新输入它..编辑。对不起 – ecu 2009-10-24 00:47:20

+0

是的,我在结果句柄上调用它,但仍然没有 – ecu 2009-10-24 00:54:38

1

已解决。我改变了这个查询和它的工作原理:

"SELECT a as A, b as B, c as C, 'd' as type FROM x WHERE id = $id UNION ALL 
SELECT a as A, b as B, c as C, 'e' as type FROM y WHERE id = $id UNION ALL 
SELECT a as A, b as B, c as C, 'f' as type FROM z WHERE id = $id ORDER BY a DESC LIMIT 10"; 
0

不好的做法,不应该调用for循环中的函数,这将导致性能问题。

for($i = 0 ; $i < mysql_num_rows($result) ; $i++){ 
    $row = mysql_fetch_assoc($result); 
    echo($row['a']); 
} 

你也想获取循环中的关联数组?这也会每次都执行?

良好实践

$countRows = mysql_num_rows($result); 

for($i=0; $i<$countRows; $i++){ 
    $row = mysql_fetch_assoc($result); 
    echo "Row: ".$row['a']."<br />"; 
} 

$row = mysql_fetch_assoc($result); 

foreach($row as $key=>$value) { 
    echo "Key: ".$key." Value: ".$value."<br />"; 
} 

while($row = mysql_fetch_assoc($result)) 
{ 
    echo "Row: ".$row['a'] . "<br />"; 
} 
0

我要回答这个问题,实际( “是否UNION ALL返回数组?”)。

不,union [all]不是返回数组,它用于连接结果集。如果在union all表单中使用它,则可以确保保留结果集中的所有重复行。

那就是all就是这样。

相关问题