【问题标题】:How do I execute this mysql query with PHP and then randomize the results?如何使用 PHP 执行这个 mysql 查询,然后随机化结果?
【发布时间】:2014-08-15 00:10:05
【问题描述】:

我正在查询一个表,但我需要四组不同的结果,每组都有不同的 type_id

SELECT item FROM table WHERE type_id ='1'LIMIT 10;

SELECT item FROM table WHERE type_id ='2'LIMIT 10;

SELECT item FROM table WHERE type_id ='3'LIMIT 10;

SELECT item FROM table WHERE type_id ='4'LIMIT 10;

因此,我需要一种最有效的方法来在一个查询中实现这一点。

然后,一旦完成,我需要一种方法来随机化或随机化 mysqli 结果对象,但我遇到了麻烦。我不希望在查询中使用 rand。

【问题讨论】:

标签: php mysql sql mysqli


【解决方案1】:

SQL:

SELECT item FROM table WHERE type_id ='1'LIMIT 10
Union
SELECT item FROM table WHERE type_id ='2'LIMIT 10
Union
SELECT item FROM table WHERE type_id ='3'LIMIT 10
Union
SELECT item FROM table WHERE type_id ='4'LIMIT 10;

或者你可以使用 IN 子句,但你不会得到每个 type_id 的 10 个

SELECT item FROM table WHERE type_id IN ( '1', '2', '3', '4' ) LIMIT 40;

将所有内容提取到数组中后,您可以使用随机播放。

shuffle($arrResults);

【讨论】:

  • LIMIT 40 的查询并不能确保您获得每种类型的 10 个 - 它只会给您前 40 个。
  • 是的,粗略,这就是为什么我说你不会得到每个 type_id 的 10 个
  • 哦,是的,你做到了!我的错,对不起。
【解决方案2】:

我认为这是得到你想要的最快的方法:

(SELECT item FROM table WHERE type_id ='1' LIMIT 10)
UNION ALL
(SELECT item FROM table WHERE type_id ='2' LIMIT 10)
UNION ALL
(SELECT item FROM table WHERE type_id ='3' LIMIT 10)
UNION ALL
(SELECT item FROM table WHERE type_id ='4' LIMIT 10)
ORDER BY rand();

有 40 条记录,order by rand() 应该很快。

请注意,这不会获得(最多)40 个随机记录。它获得 40 条任意记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多