2011-12-12 35 views
1

我試圖從數據庫中的兩個表中查詢單個結果。這是我的代碼:嘗試使用UNION查詢兩個表時出錯所有

$pageid = mysql_real_escape_string($_GET['id']); 
$query = sprintf("(SELECT * FROM classifieds WHERE pageid = '$pageid' LIMIT 1) 
UNION ALL 
(SELECT * FROM resumes WHERE pageid = '$pageid' LIMIT 1)"); 
$result = mysql_query($query); 

while ($row = mysql_fetch_array($result)) { 
    echo $row['title'] . "<br/>"; 
    } 

pageid是一個URL變量。此代碼嘗試使用該變量,用它查詢數據庫並返回結果。我得到這個錯誤:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource 

在這裏打牆。無法弄清楚爲什麼這個錯誤不斷髮生。任何幫助==謝謝。

+0

你應該檢查你的$結果是否爲空。另外,從控制檯嘗試運行查詢,看看你是否得到任何結果。 –

回答

1

當使用UNION時,兩個查詢的列數和列類型必須相同。

現在,當您在查詢兩個不同的表格時,我猜想可以安全地假定任意一列的數量不同或對應的列類型不匹配。

嘗試使用這樣的事情

select col1, col2 from classifieds....... 
Union All 
select col1, col2 

但同樣,數量和相應的列類型應該是相同的。

+1

我很確定這是他得到的問題:) –

+0

是的,這是問題所在。列數和類型不同。謝謝。 – Norse

0

直接執行您的查詢並查看它是否返回任何行。順便說一下,sprintf有什麼用處?

0

添加這個錯誤處理代碼:

$result = mysql_query($query); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

您的查詢的執行失敗,結果$result設置爲false這不是一個有效的MySQL結果資源,因此錯誤。

一旦可能導致問題的原因是兩個表的列數不相等。 UNION ALL預計它的子查詢返回相同數量的列。

+0

我不知道這個,它會有幫助。謝謝。 – Norse