我有这张桌子。
id name parents
1 Apparel
46 Apparel 1
47 Child Apparel 1,46
49 Child Apparel 2 46,1
我尝试了这个查询,但效果很好。
SELECT * FROM categories WHERE 1 IN (parents)
id name parents
46 Apparel 1
47 Child Apparel 1,46
为什么此查询会带来1条记录而不是2条?
SELECT * FROM categories WHERE 46 IN (parents)
id name parents
49 Child Apparel 2 46,1
答案 0 :(得分:7)
您应该使用FIND_IN_SET
而不是IN:
SELECT * FROM categories WHERE FIND_IN_SET('46', parents)
请注意,此查询速度很慢。您应该重新设计数据库。我建议你看一下这个幻灯片,以便更好地在MySQL中存储分层数据:
答案 1 :(得分:0)
如果你想维护类别表,你可以通过这种方式维护这个表。
父级中的根类别仅包含1 父类中的子类别包含根类别的值
所以父列只保留1个值而不是1个值,正如你所提到的那样
您也可以使用递归函数
获取该记录function showlist($parent) {
$result = mysql_query("SELECT ID FROM categorie WHERE parentID='$parent'");
while ($line = mysql_fetch_array($result)) {
if($catlistids!=""){ $catlistids .= ", "; }
$catlistids .= $line["ID"];
showlist($line["ID"]);
}
return $catlistids;
}