答案 0 :(得分:3)
请尝试此查询:
(SELECT * FROM `tablename` where `type` = 'text' limit 0,2) UNION (SELECT * FROM `tablename` where `type` = 'image' limit 0,5)
它会返回这样的内容,
+--------+-------+------------+
| id | type | value |
+--------+-------+------------+
| 1 | text | text1 |
| 2 | text | text2 |
| 4 | image | image1.jpg |
| 5 | image | image2.jpg |
| 6 | image | image3.jpg |
| 7 | image | image4.jpg |
| 8 | image | image5.jpg |
+--------+--------------------+
答案 1 :(得分:1)
要在一个查询中执行此操作,将需要运行总计,并且相当复杂。一个更好的解决方案可能是做两个单独的查询,然后使用UNION
聚合结果集:
SELECT * FROM yourTable
WHERE type='text'
ORDER BY RAND()
LIMIT 3
UNION ALL
SELECT * FROM yourTable
WHERE type='image'
ORDER BY RAND()
LIMIT 7
我要返回10行,因为30%和5%的70%没有给出整数。我也回避了text
和image
类型的记录可能少于3或7条的情况,这会使你想要的比例下降。