如何用PHP执行这个mysql查询然后随机化结果?

时间:2014-06-24 16:15:58

标签: php mysql sql mysqli

我正在查询一个表,但我需要四组不同的结果,每组都有不同的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。

2 个答案:

答案 0 :(得分: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。

shuffle($arrResults);

答案 1 :(得分:1)

我认为这是获得你想要的最快方式:

(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个任意记录。