【发布时间】:2013-05-28 04:36:25
【问题描述】:
我想检索具有给定父类别的所有子类别,并且我想将我的产品表加入到该结果中。结果应该是一个面包屑导航,用户可以在其中单击父类别并检索该类别中包含子类别的所有产品。
面包屑看起来像这样:Electronic >> Music >> MP3-Player >> Flash
如果用户点击“音乐”,结果应包含“音乐”、“MP3-播放器”和“Flash”类别中的所有产品。
我使用嵌套集,但我发现处理复杂的查询真的很困难。
我的数据库是这样的:
category_table:ID/名称/lft/rgt products_table: ID / Title / description / pic / category_id / ...
我的查询现在看起来像这样:
$result=mysql_query('SELECT *, node.id, node.name
FROM category AS node,
category AS parent,
category AS sub_parent,
(
SELECT node.name
FROM category AS node,
category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = 23
GROUP BY node.name
ORDER BY node.lft
)AS sub_tree JOIN products ON products.id = id
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
AND sub_parent.name = sub_tree.name
GROUP BY node.name
ORDER BY node.lft;') or die(mysql_error());
但这给了我错误“#1104 - SELECT 将检查超过 MAX_JOIN_SIZE 行;检查您的 WHERE 并使用 SET SQL_BIG_SELECTS=1 或 SET MAX_JOIN_SIZE=# 如果 SELECT 没问题”。没看懂。
【问题讨论】:
-
如果可以对DB进行更改,我建议在类别表中使用“面包屑”字段,并在该字段中存储所有父母的逗号分隔值,这样您的搜索会相对容易并提高性能是额外的优势。
标签: php mysql database join nested-lists