繁体   English   中英

这个MySQL查询有什么问题

[英]What's wrong with this MySQL Query

我有这张桌子。

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   

您应该使用FIND_IN_SET而不是IN:

SELECT * FROM categories WHERE FIND_IN_SET('46', parents)

请注意,此查询将很慢。 您应该重新设计数据库。 我建议您查看此幻灯片,以了解在MySQL中存储分层数据的更好方法:

如果您要维护类别表,则有一种维护该表的方法。

父级中的根类别仅包含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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM