mysql - 有張訂單表,假設(shè)有個(gè)2個(gè)手機(jī)號(hào),每個(gè)手機(jī)號(hào)都有5個(gè)訂單,如何用一個(gè)sql實(shí)現(xiàn)每個(gè)手機(jī)號(hào)隨機(jī)取3個(gè)訂單?
問題描述
CREATE TABLE `order` ( `order_id` int(11) NOT NULL AUTO_INCREMENT, `phone` bigint(20) NOT NULL DEFAULT ’0’ COMMENT ’手機(jī)號(hào)’, PRIMARY KEY (`order_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
有什么可以不用union all的方法嗎,因?yàn)檫@個(gè)是我簡化的模型,實(shí)際業(yè)務(wù)中,這個(gè)phone的數(shù)量可能很多。
SELECT phone, GROUP_CONCAT(order_id ORDER BY rand())FROM `order`WHERE phone IN (11, 22)GROUP BY phone
上面這個(gè)方法還是取出了所有數(shù)據(jù),GROUP_CONCAT函數(shù)不支持limit關(guān)鍵字。
問題解答
回答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() 性能很差。最好就是拿出一定數(shù)量的記錄,然后在程序中隨機(jī)再選擇三條。
