2010-03-17 43 views
1

並獲得有意義的結果。如何結合這些查詢

目前我正在這三個疑問:

SELECT t.type,t.id,s.title FROM db1.tags t INNER JOIN db1.st s ON s.id=t.id WHERE id LIKE '%%' AND t.tag='foo' AND t.type='s' ORDER BY tag desc LIMIT 0, 19 
    SELECT t.type,t.id,v.title FROM db1.tags t INNER JOIN db1.vi v ON v.id=t.id WHERE id LIKE '%%' AND t.tag='foo' AND t.type='v' ORDER BY tag desc LIMIT 0, 19 
    SELECT t.type,t.id,i.ca AS title FROM db1.tags t INNER JOIN db2.tablename i ON i.id=t.id WHERE id LIKE '%%' AND t.tag='foo' AND t.type='i' ORDER BY tag desc LIMIT 0, 19 

然後嘗試將數據結果結合起來,但我真的喜歡是,如果我可以將它們合併成一個單一的查詢。

有什麼想法?

回答

4

您可以使用UNION ALL

SELECT * FROM (
    SELECT t.type,t.id,s.title 
    FROM db1.tags t 
    INNER JOIN db1.st s ON s.id=t.id 
    WHERE id LIKE '%%' AND t.tag='foo' AND t.type='s' 
    ORDER BY tag DESC 
    LIMIT 0, 19 
) AS T1 
UNION ALL 
SELECT * FROM (
    SELECT t.type,t.id,v.title 
    FROM db1.tags t 
    INNER JOIN db1.vi v ON v.id=t.id 
    WHERE id LIKE '%%' AND t.tag='foo' AND t.type='v' 
    ORDER BY tag DESC 
    LIMIT 0, 19 
) AS T2 
UNION ALL 
SELECT * FROM (
    SELECT t.type,t.id,i.ca AS title 
    FROM db1.tags t 
    INNER JOIN db2.tablename i ON i.id=t.id 
    WHERE id LIKE '%%' AND t.tag='foo' AND t.type='i' 
    ORDER BY tag DESC 
    LIMIT 0, 19 
) AS T3 
ORDER BY type, id DESC 
+0

我會把它放到嵌套查詢中,雖然 – Quassnoi 2010-03-17 13:57:01

+0

會這樣做,謝謝 – mcgrailm 2010-03-17 14:19:28

+0

ohh我必須把每個查詢周圍(),並移動限制和秩序的結束 – mcgrailm 2010-03-17 14:20:28

0

你應該考慮使用UNION。 因爲您總是返回3個相同的字段類型/ ID /標題

這也會使3個內部請求到數據庫,但是,您將能夠限制結果並訂購完整的彙總結果。

0

如果你不想使用聯合,你可以嘗試使用外部聯接。在on子句中添加t.type = something。最後,你必須使用case語句來選擇標題。並不比聯盟方式更容易,但它可能會更快,因爲它只是一個電話。