Что не так с этим MySQL Query - PullRequest
1 голос
/ 20 марта 2012

У меня есть эта таблица.

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 ]

7 голосов
/ 20 марта 2012

Вы должны использовать FIND_IN_SET вместо IN:

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

Обратите внимание, что этот запрос будет медленным.Вы должны перепроектировать свою базу данных.Я предлагаю вам взглянуть на это слайд-шоу, чтобы найти лучшие способы хранения иерархических данных в MySQL:

0 голосов
/ 20 марта 2012

Если вы хотите сохранить таблицу категорий, существует способ, которым вы должны поддерживать эту таблицу.

корневая категория в родительской содержит только 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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...