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