我希望按重量按升序排列权重列的正值,然后按任意顺序列出负值。
这是我尝试过的:
SELECT *
FROM `mytable`
WHERE weight >= 0
ORDER BY weight
UNION
SELECT *
FROM `mytable`
WHERE weight < 0
ORDER BY weight
我得到了:
SQL Error (1221): Incorrect usage of UNION and ORDER BY
答案 0 :(得分:1)
只需使用一个查询,然后使用适当的order by
:
SELECT *
FROM `mytable`
ORDER BY (weight >= 0) desc,
weight;
MySQL将数字上下文中的布尔值视为数字,因此表达式(weight >= 0)
被视为&#34; 1&#34; (积极的)和&#34; 0&#34; (对于否定)。
在任何情况下,您都不能依赖union
查询的顺序,因为删除重复项可以对排序做任何事情。你不应该依赖于union all
的排序,因为SQL中没有任何内容要求第一个子查询中的行在第二个子行之前返回(尽管实际上这是真的)。
作为备注:您获得的错误是由第一个order by
引起的,而不是第二个Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/(.+)$ index.php?lang=$1&page=$2&detail=$3 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/(.+)$ index.php?lang=$1&page=$2 [L,QSA]
RewriteRule ^([^/]+)/(.+)$ index.php?lang=$1 [L,QSA]
。