2010-02-14 59 views
1

我在兩個表中搜索一個字符串。如何在多表搜索中找出我的結果表?

$sql="SELECT download.title FROM download 
     WHERE download.title LIKE '%$search%' 
     UNION 
     SELECT news.title FROM news 
     WHERE news.title LIKE '%$search%' OR news.text LIKE '%$search%' "; 

我怎樣才能找出我找到的記錄來自哪個表?

+0

我會查詢兩次,一次爲每個表,而不是使用工會更好。 – Marius 2010-02-14 11:01:43

+0

我不知道@@ Identity是否可以提供信息。 – 2010-02-14 11:05:00

回答

3

爲什麼不在結果集中添加鑑別器列?這使您可以查詢一次,並通過來源獲取結果。

SELECT 'DOWNLOAD' AS SOURCE, download.title FROM download WHERE download.title LIKE '%$search%' 
UNION ALL 
SELECT 'NEWS', news.title FROM news WHERE news.title LIKE '%$search%' OR news.text LIKE '%$search%'; 
+2

+1,但您可能需要爲第一列添加別名。 – 2010-02-14 11:08:58

+0

我必須同意:) – Romain 2010-02-14 13:46:29

+0

編輯SQL並添加所有(對於UNION ALL),因爲它理論上可以保存排序操作:) – Romain 2010-02-14 15:15:24

0

最簡單的方法是查詢兩次,每次查詢一次。然後你會知道哪一個結果被發現。如果你想把它們一起顯示並排序,你可以把這兩個結果集合並在一起,然後再顯示它們。

1

在PHP中,您可以使用mysql_field_table函數。

+0

我沒有得到答案與​​多個表。就在有一張桌子時! – max 2010-02-14 14:10:12

1

您可以添加一個額外的列表示源,然後你就可以用它來確定

例如

$

sql="SELECT download.title, 'download' as source FROM download WHERE download.title LIKE '%$search%' 
UNION 
SELECT news.title 'news' as source FROM news, WHERE news.title LIKE '%$search%' OR news.text LIKE '%$search%' "; 

雖然按照先前的評論,查詢兩次可能會比使用工會