这个MySQL查询有什么问题

时间:2012-03-20 13:40:12

标签: mysql sql

我有这张桌子。

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   

2 个答案:

答案 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;

}