mysql - 有张订单表,假设有个2个手机号,每个手机号都有5个订单,如何用一个sql实现每个手机号随机取3个订单?
PHP中文网
PHP中文网 2017-04-17 14:43:54
0
1
678
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关键字。

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(1)
迷茫
(SELECT `order_id` FROM `order` WHERE `phone`='$phone1' LIMIT 3 ORDER BY rand())
すべてを結合する
(SELECT `order_id` FROM `order` WHERE `phone`='$phone2' LIMIT 3 ORDER BY rand())

SQL のみを使用する場合、これが最も簡単ですが、ORDER BY rand() のパフォーマンスは非常に劣ります。最善の方法は、一定数のレコードを取り出し、プログラム内でさらに 3 つをランダムに選択することです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート