我有一个查询,我想在一个mysql查询中选择标准广告的特色广告(一个查询因为网站流量很大,所以在数据库中进行两次查询会导致性能问题)
* 要求选择所有精选广告,然后选择2个标准广告,并且所有广告都必须随机订购。 *
所以我使用了以下查询,它可以与UNION关键字一起使用,但问题是RANDOM的排序仅适用于第二个查询。
( SELECT * FROM ads WHERE status='Y' AND priority='High' ORDER BY RAND() )
UNION (SELECT * FROM ads WHERE status='Y' AND count<=limits
AND priority!='High'
ORDER BY RAND() LIMIT 0 , 2
)
我在这里做错了什么?有任何想法吗 ?并且作为一个侧面质疑任何性能友好的方式来选择随机行而不是使用RAND关键字?
答案 0 :(得分:1)
你在工会结束后错过了兰特。
SELECT * from
( SELECT * FROM ads WHERE status='Y' AND priority='High' )
UNION
( SELECT * FROM ads WHERE status='Y' AND count<=limits AND priority!='High' LIMIT 0 , 2 ) ADS
ORDER BY RAND()
这会将查询的联合结果集创建为ADS并随机排序。
答案 1 :(得分:1)
尝试
SELECT *
FROM
(
SELECT *
FROM ads
WHERE status = 'Y'
AND priority = 'High'
ORDER BY RAND()
) q
UNION ALL
(
SELECT *
FROM ads
WHERE status = 'Y'
AND count <= limits
AND priority <> 'High'
ORDER BY RAND()
LIMIT 2
)
注意:由于特色和标准广告不重叠,因此使用UNION ALL
代替UNION
这是 SQLFiddle 演示