这个MySQL查询有什么问题

Uma*_* A. 1 mysql sql

我有这张桌子.

id  name                    parents  
1   Apparel                                                                    
46  Apparel                 1                                                  
47  Child Apparel           1,46                                               
49  Child Apparel 2         46,1                                               
Run Code Online (Sandbox Code Playgroud)

我尝试了这个查询,它工作正常.

SELECT * FROM categories WHERE 1 IN (parents)

id  name           parents
46  Apparel        1                                                  
47  Child Apparel  1,46   
Run Code Online (Sandbox Code Playgroud)

为什么这个查询带来1条记录而不是2条?

SELECT * FROM categories WHERE 46 IN (parents)

id  name             parents
49  Child Apparel 2  46,1   
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

您应该使用FIND_IN_SET而不是IN:

SELECT * FROM categories WHERE FIND_IN_SET('46', parents)
Run Code Online (Sandbox Code Playgroud)

请注意,此查询将很慢.您应该重新设计数据库.我建议你看一下这个幻灯片,以便更好地在MySQL中存储分层数据:

  • +1"你应该重新设计你的数据库" (2认同)