2009-10-24 152 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就是這樣。

相關問題