SQL Query拒绝关注order子句

时间:2011-03-03 14:57:57

标签: mysql

我正在构建一个列出数百万个目录的网站,并尝试为前端用户构建合适的搜索引擎。我目前使用以下代码:

(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)

主要问题是排序,它似乎根本不关注订单条款。

4 个答案:

答案 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是按列号

的订单