Как отобразить результаты базы данных из нескольких таблиц в порядке убывания - PullRequest
1 голос
/ 26 февраля 2012

У меня есть поиск по ключевым словам на моем сайте, который позволяет посетителям искать конкретные вещи. В моей базе данных 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 ]

3 голосов
/ 26 февраля 2012

В таком случае я бы предложил нормализовать базу данных и поместить все ключевые слова в одну таблицу . Если вы разделяете ключевые слова в соответствии с их типом, используйте столбец 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`; 
2 голосов
/ 26 февраля 2012
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
...