我不知道这是否可以通过ONE查询在mysql中实现。
假设我的表“产品”有“id”,“category_id”,“product_name”,“price”
案例1:我想从价格超过100美元的每个类别中获取5个产品
案例2:我想要获取
1-“3类产品”
2-“5类产品2”
3-“3类产品,其中价格超过100且未在第2点获取”
一个查询中的每个案例,可能吗?
PS:该表有大约100K行...
答案 0 :(得分:1)
我发现了这个方法:它非常快,并且给了我我想要的东西:
SELECT l.*
FROM (
SELECT category,
COALESCE(
(
SELECT id
FROM writings li
WHERE li.category= dlo.category
ORDER BY
li.category, li.id
LIMIT 15, 1
), CAST(0xFFFFFFFF AS DECIMAL)) AS mid
FROM (
SELECT id as category
FROM cats dl
) dlo
) lo, writings l
WHERE l.category>= lo.category
AND l.category<= lo.category
AND l.id <= lo.mid
答案 1 :(得分:0)
我认为你可以使用嵌套的select语句来做到这一点。
http://dev.mysql.com/tech-resources/articles/4.1/subqueries.html
虽然,在您收到查询后,我不确定如何将它们用作单独的select语句。我的意思是,他们都将成为一个记录集。
答案 2 :(得分:0)
案例2我想我已经......
(
select * from products where category_id = 1 limit 3
)
union
(
select * from products where category_id = 2 limit 5
)
union (
select * from products where category_id = 2 and price > 100 limit 3
)
请注意,union
将消除重复,union all
将允许重复(并且因此更快)。
这看起来像你在问什么...