在MySQL中选择优先级

时间:2016-01-08 09:37:08

标签: mysql

我的表格数据如下所示:

SQL

如果我想在SQL中选择限制为5的数据并按优先级类型=图像显示多达70%并且键入=文本多达30%?

2 个答案:

答案 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%没有给出整数。我也回避了textimage类型的记录可能少于3或7条的情况,这会使你想要的比例下降。