用于按类别顺序显示图像的Mysql查询

时间:2015-05-09 18:15:01

标签: php mysql

我需要在视图中显示类别明智的一个图像,但是下面的查询将收集所有类别图像并将每个类别项目显示为洞。

SELECT *  
                        FROM (
                          (SELECT *, 
                                 IF( @prev <> category_id, 
                                     @rownum := 1, 
                                     @rownum := @rownum+1 
                                 ) AS rank, 
                                 @prev := category_id, 
                                 @rownum  
                          FROM (
                            SELECT * FROM products 
                            ORDER BY category_id, rand()
                          ) random_prodcts)
                        ) products_ranked 
                        WHERE rank <= 20000 AND parent_category_id = 3;

我希望修改此查询并将每个类别项目显示为一个,直到所有项目一个接一个地循环显示。

这是表结构。

Id  Parent_category_id  Category_id Product_position
1         3                    77   00
2         3                    77   00
3         3                    78   00
4         3                    78   00
5         3                    89   00
6         3                    89   00

1 个答案:

答案 0 :(得分:0)

如果您需要按特定顺序返回的行,请在外部查询中添加BinaryFormatter

例如,如果要首先返回ORDER BY为1的所有行,则为:

rank

我不明白为什么 SELECT r.* FROM ( SELECT @rownum := IF(@prev = r.category_id, @rownum+1, 1) AS rank , p.id , p.parent_category_id , @prev := p.category_id AS category_id , p.product_position FROM products p CROSS JOIN (SELECT @prev := NULL, @rownum := 0) i ORDER BY p.category_id , RAND() ) r WHERE r.parent_category_id = 3 AND r.rank <= 20000 ORDER BY r.rank , r.category_id 列上的等式谓词位于外部查询中,而不是内部视图查询中。如果parent_category_id依赖于parent_category_id(示例数据未显示与多个category_id相关联的category_id值的示例),那么我不知道通过减少需要实现内联视图的数量或数量,减少对parent_category_id函数的调用次数,并减少对RAND()函数的调用次数,查看无法重新定位的任何原因,以获得更好的性能需要排序的集合的大小。