Mysql SQL:联合房地产优先权优惠
我试图编写一个sql查询来列出数据库中的所有报价,但首先要按兰德检索优先级非空顺序,然后按id检索优先级空顺序 我做了一些这样的事情:Mysql SQL:联合房地产优先权优惠,mysql,sql,database,Mysql,Sql,Database,我试图编写一个sql查询来列出数据库中的所有报价,但首先要按兰德检索优先级非空顺序,然后按id检索优先级空顺序 我做了一些这样的事情: (SELECT anunt_lista_id FROM anunturi__lista WHERE anunt_lista_is_prioritar IS NOT NULL ORDER BY RAND()) UNION (SELECT anunt_lista_id FROM anunturi__lista WHERE anunt_lista_is_p
(SELECT anunt_lista_id
FROM anunturi__lista
WHERE anunt_lista_is_prioritar IS NOT NULL
ORDER BY RAND())
UNION
(SELECT anunt_lista_id
FROM anunturi__lista
WHERE anunt_lista_is_prioritar IS NULL
ORDER BY anunt_lista_id ASC)
LIMIT 100
但是ORDER BY被忽略,没有人被应用
还有另一种方法,使用另一种方法进行RAND,因为我知道这太慢了?您可以为order by创建虚拟列 试试这个:
SELECT
if(anunt_lista_is_prioritar IS NOT NULL, rand() , 0) as fld_1,
if(anunt_lista_is_prioritar IS NULL,anunt_lista_id , 0) as fld_2,
anunt_lista_id
FROM anunturi__lista
order by fld_1 desc , fld_2 asc
Limit 100
只有将限制子句添加到特定部分时,UNION各个部分中的ORDER BY才有用,否则将忽略它 从: 若要对单个SELECT应用ORDER BY或LIMIT,请放置子句 在括住“选择”框的括号内: 但是,对单个SELECT语句使用ORDER BY意味着 与行在最终结果中的显示顺序无关 因为默认情况下,UNION生成一组无序的行。因此 在这种情况下,ORDER BY的使用通常与 限制,以便用于确定选定行的子集 为SELECT检索,即使它不一定会影响 这些行在最终联合结果中的顺序。如果出现“订购方式” 在选择中没有限制,它被优化了,因为它将 反正没有效果 如果希望首先对结果的第一部分进行排序,则必须以某种方式解决此问题:
(SELECT anunt_lista_id
FROM anunturi__lista
WHERE anunt_lista_is_prioritar IS NOT NULL)
UNION
(SELECT anunt_lista_id
FROM anunturi__lista
WHERE anunt_lista_is_prioritar IS NULL)
ORDER BY (anunt_lista_is_prioritar IS NULL) ASC,
CASE WHEN anunt_lista_is_prioritar IS NOT NULL THEN
RAND()
ELSE anunt_lista_id END
LIMIT 100
order by:anunt\u lista\u is\u prioritar is NULL的第一个子句ASC将在不为NULL时给出false 0,在为NULL时给出true 1。由于是订购ASC,0将比1先出现。在这种情况下,我如何使用兰德的其他替代品?据我所知,RAND速度太慢,建议避免使用。
(SELECT anunt_lista_id
FROM anunturi__lista
WHERE anunt_lista_is_prioritar IS NOT NULL)
UNION
(SELECT anunt_lista_id
FROM anunturi__lista
WHERE anunt_lista_is_prioritar IS NULL)
ORDER BY (anunt_lista_is_prioritar IS NULL) ASC,
CASE WHEN anunt_lista_is_prioritar IS NOT NULL THEN
RAND()
ELSE anunt_lista_id END
LIMIT 100