您的位置:首页技术文章
文章详情页

mysql - 有张订单表,假设有个2个手机号,每个手机号都有5个订单,如何用一个sql实现每个手机号随机取3个订单?

【字号: 日期:2022-06-22 08:31:46浏览:25作者:猪猪

问题描述

CREATE TABLE `order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `phone` bigint(20) NOT NULL DEFAULT ’0’ COMMENT ’手机号’, PRIMARY KEY (`order_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

有什么可以不用union all的方法吗,因为这个是我简化的模型,实际业务中,这个phone的数量可能很多。

SELECT phone, GROUP_CONCAT(order_id ORDER BY rand())FROM `order`WHERE phone IN (11, 22)GROUP BY phone

上面这个方法还是取出了所有数据,GROUP_CONCAT函数不支持limit关键字。

问题解答

回答1:

(SELECT `order_id` FROM `order` WHERE `phone`=’$phone1’ LIMIT 3 ORDER BY rand())UNION ALL(SELECT `order_id` FROM `order` WHERE `phone`=’$phone2’ LIMIT 3 ORDER BY rand())

只用SQL完成的话,这样最简单,但是 ORDER BY rand() 性能很差。最好就是拿出一定数量的记录,然后在程序中随机再选择三条。