我创建了以下查询以生成两级导航, 一级 - 类别 二级 - 子类别
Ex. category - Year<br />
subcategories - 2013, 2012, 2011, 2010, 2009
看起来像这样:
$query = "
SELECT categories.Category, categories.idCat, subcategories.subCategory, subcategories.idSub
FROM
categories
JOIN
cat_sub ON categories.idCat = cat_sub.idCat
JOIN
subcategories ON subcategories.idSub = cat_sub.idSub
ORDER BY
categories.idCat DESC,subcategories.idSub DESC";
表格如下所示:
categories(idCat, Category)
subcategories(idSub, subCategory)
cat_sub(idCat, idSub)
我想将子类别的数量限制为三个,同时保持类别不受限制。 任何帮助将不胜感激!
例。仅显示
类别 - 年份
子类别 - 2013、2012、2011
希望我说得更清楚一些。
谢谢, 亚历克斯
最佳答案
这很棘手,但我们可以使用一些用户变量来解决:
$query = "
SELECT
c.Category,
c.idCat,
s.subCategory,
s.idSub
FROM
categories c
JOIN cat_sub cs ON c.idCat = cs.idCat
JOIN (
SELECT
IF(@C != c.Category, @ROWNUM := 1, @ROWNUM := @ROWNUM +1) AS RN,
@C := c.Category,
c.idCat,
s.idSub,
s.subCategory
FROM categories c
JOIN cat_sub cs ON c.idCat = cs.idCat
JOIN subcategories s ON s.idSub = cs.idSub
CROSS JOIN (SELECT @C := '') t2
ORDER BY c.idCat DESC, s.idSub DESC
) s ON s.idSub = cs.idSub AND cs.idCat = s.idCat
JOIN (
SELECT idCat, MAX(rn) AS mx
FROM (
SELECT
IF(@C != c.Category, @ROWNUM := 1, @ROWNUM := @ROWNUM +1) AS rn,
@C := c.Category,
c.idCat
FROM categories c
JOIN cat_sub cs ON c.idCat = cs.idCat
JOIN subcategories s ON s.idSub = cs.idSub
CROSS JOIN (SELECT @C := '') t2
ORDER BY c.idCat DESC, s.idSub DESC
) t
GROUP BY idCat
) maxcat ON maxcat.idCat = c.idCat AND s.rn BETWEEN maxcat.mx-2 AND maxcat.mx
ORDER BY c.idCat DESC, s.idSub DESC";
在那之前使用临时表或 View 会更优雅,但我选择坚持使用常规 sql。
关于mysql - 在 MySQL 的 JOIN 上设置 LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19969503/