2012-02-25 126 views
1

我在我的網站上有一個關鍵字搜索,允許訪問者搜索特定的東西。我的msysql數據庫有15個表格,對於搜索功能,我使用UNION ALL將它們全部加入,以便訪問者可以同時搜索所有表格。問題是所有的結果都是按升序排列的。我如何按降序獲得結果。如何從多個表中降序顯示數據庫結果

SELECT * 
FROM table1 
WHERE keyword LIKE %s OR id LIKE %s 

UNION ALL 

SELECT * 
FROM table2 
WHERE keyword LIKE %s OR id LIKE %s 

UNION ALL 

SELECT * 
FROM table3 
WHERE keyword LIKE %s OR id LIKE %s 

回答

2
SELECT * 
FROM 
    (SELECT * 
    FROM table1 
    WHERE keyword LIKE '%s' OR id LIKE '%s' ---notice the quotes 
    UNION ALL SELECT ....... 
) AS tmp 
ORDER BY keyword DESC 
+0

是 - 瞭解更多信息,請查看MySQL手冊,裏面有更多的例子: http://dev.mysql.com/doc/refman/5.0/en/union.html – Daan 2012-02-25 23:57:12

+0

我已經已經嘗試過這一點,我不斷收到錯誤消息SELECT * FROM table1 WHERE關鍵字LIKE%s或id編號LIKE%s ORDER BY編號DESC – Will 2012-02-25 23:57:31

+0

您嘗試過選擇col1,col2而不是選擇*嗎? – 2012-02-25 23:58:29

3

在這種情況下,我建議你到標準化數據庫,並把所有的關鍵字在同一個表如果根據其類型分隔關鍵字,請使用type列表示它爲

以下查詢將執行您所要求的操作。

SELECT * 
FROM ((SELECT * 
     FROM table1 
     WHERE keyword LIKE '%s' 
       OR id LIKE '%s') 
     UNION ALL 
     (SELECT * 
     FROM table2 
     WHERE keyword LIKE '%s' 
       OR id LIKE '%s') 
     UNION ALL 
     (SELECT * 
     FROM table3 
     WHERE keyword LIKE '%s' 
       OR id LIKE '%s')) AS bigtable 
ORDER BY `id`;