我不知道在mysql中是否可以通过一个查询实现这一点。
假设我有一个表"products“,它包含"id”、"category_id“、"product_name”、"price“
案例1:我想从价格超过100美元的每个类别中获取5个产品
案例2:我想获取
1-“1类中的3种产品”
2-“类别2的5种产品”
3- "3个第二类产品,其价格高于100,并且没有在上面的第二点中获得“
在一个查询中每个案例,这是可能的吗?
PS :表大约有100K行……
发布于 2011-04-13 20:10:44
我发现了这个方法:它非常快,并且给了我想要的东西:
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发布于 2011-04-12 23:11:31
我认为您可以使用嵌套的select语句来实现这一点。
http://dev.mysql.com/tech-resources/articles/4.1/subqueries.html
不过,在获得查询之后,我不确定如何将它们用作单独的select语句。我的意思是,他们都将是一个记录。
发布于 2011-04-12 23:21:37
案例二我想我有..。
(
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将允许重复(因此速度更快)。
你看过了吗?
mySQL Returning the top 5 of each category
这看起来就是你要问的..。
https://stackoverflow.com/questions/5637284
复制相似问题