我正在构建一个列出数百万个目录的网站,并尝试为前端用户构建合适的搜索引擎。我目前使用以下代码:
(SELECT *
FROM directories
WHERE title LIKE '%directory%'
AND title LIKE '%submit%'
AND nofollow='0'
AND pr_page >= '2'
ORDER BY pr_page DESC)
UNION
(SELECT *
FROM directories
WHERE title LIKE '%directory%'
OR title LIKE '%submit%'
AND nofollow='0'
AND pr_page >= '2'
ORDER BY pr_page DESC)
主要问题是排序,它似乎根本不关注订单条款。
答案 0 :(得分:7)
尝试创建一个order by子句,它位于最后一个union之外。
(SELECT * FROM directories WHERE title LIKE '%directory%' AND title LIKE '%submit%' AND nofollow='0' AND pr_page >= '2')
UNION
(SELECT * FROM directories WHERE title LIKE '%directory%' OR title LIKE '%submit%' AND nofollow='0' AND pr_page >= '2')
ORDER BY pr_page DESC
答案 1 :(得分:1)
我很惊讶甚至执行。我不知道你可以通过UNION中的个别条款订购。 (afaik在SQL Server中无法实现)。
要解决您的问题,请将ORDER BY移到UNION之外。
SELECT *
FROM directories
WHERE title LIKE '%directory%'
AND title LIKE '%submit%'
AND nofollow='0'
AND pr_page >= '2'
UNION
SELECT *
FROM directories
WHERE title LIKE '%directory%'
OR title LIKE '%submit%'
AND nofollow='0'
AND pr_page >= '2'
ORDER BY pr_page DESC
答案 2 :(得分:0)
由于这个问题似乎有更多的答案,这是我的看法:
SELECT * FROM (
(SELECT * FROM directories WHERE title LIKE '%directory%' AND title LIKE '%submit%' AND nofollow='0' AND pr_page >= '2' ORDER BY pr_page DESC)
UNION
(SELECT * FROM directories WHERE title LIKE '%directory%' OR title LIKE '%submit%' AND nofollow='0' AND pr_page >= '2' ORDER BY pr_page DESC)
) AS myunion
ORDER BY myunion.pr_page
答案 3 :(得分:0)
使用UNION时,orderby无法正常工作,请将其替换为
SELECT * FROM (your query goes here)
ORDER BY X
其中X是按列号
的订单