如何以降序显示多个表的数据库结果

时间:2012-02-25 23:46:50

标签: php mysql sql-order-by

我的网站上有一个关键字搜索,允许访问者搜索特定的内容。我的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 个答案:

答案 0 :(得分: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`; 

答案 1 :(得分: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