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