2010-04-06 92 views
0

我試圖將用戶輸入的搜索詞與兩個表匹配:帖子和畫廊。問題是union all子句不起作用。我的代碼有問題嗎?爲什麼這個簡單的MySQL語句不工作?

$query = mysql_query(" 

    SELECT * FROM posts WHERE title LIKE '%$searchTerm%' 
     OR author LIKE '%$searchTerm%' 
     OR location LIKE '%$searchTerm%' 
     OR excerpt LIKE '%$searchTerm%' 
     OR content LIKE '%$searchTerm%' 

     UNION ALL 

    SELECT * FROM galleries WHERE title LIKE '%$searchTerm%' 

     "); 
+2

什麼不起作用? 這些表格是否有相同的列? – Wolph 2010-04-06 23:23:55

回答

1

當您在兩個查詢做UNION ALL,它要求你從兩個表取回的列數相同,具有相同的數據類型,以相同的順序。由於你在做SELECT *,這意味着postsgalleries具有完全相同數量的相同類型的列,具有相同的順序。我懷疑是這樣(但我猜你可能會幸運)。


編輯添加的,你可以怎麼做這個工作的一個例子

你需要使列編號/類型匹配,你可以用這種方法做(I」 m猜猜你需要哪一列,只需加上「N/A」表示我假設的列不存在於galleries):

SELECT title, author, location, excerpt, content 
FROM posts 
WHERE title LIKE '%$searchTerm%' 
    OR author LIKE '%$searchTerm%' 
    OR location LIKE '%$searchTerm%' 
    OR excerpt LIKE '%$searchTerm%' 
    OR content LIKE '%$searchTerm%' 

UNION ALL 

SELECT title, 'N/A', 'N/A', 'N/A', 'N/A' 
FROM galleries 
WHERE title LIKE '%$searchTerm%' 
+0

啊我看,是的表格有不同的命名列和不同數量的列。所以,因爲UNION ALL不是我所需要的,我可以使用什麼來搜索這兩個表格,來自帖子表格的5個列和來自畫廊表格的1個? – Clark 2010-04-06 23:28:24

+0

@Chad:取決於mysql的版本;新版本會對列的數量和類型進行超集。見http://dev.mysql.com/doc/refman/5.5/en/union.html – wallyk 2010-04-06 23:29:33

+0

@Clark你仍然可以用'UNION ALL'來完成,你只需要明確定義列。我不太瞭解你的表格結構,但我會用一個例子來說明它的工作原理。 – 2010-04-06 23:32:24

相關問題