Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Столкнулся с такой проблемой.
Есть таблица tree
`id` int(15) NOT NULL,
`name` varchar(150) CHARACTER DEFAULT NULL,
`prev_id` int(15) DEFAULT NULL,
`tree` varchar(255) CHARACTER DEFAULT NULL,
PRIMARY KEY (`id`)
Поле prev_id содержит ID родителя
Поле tree содержит список id. пример (70, 72)
+----+------------------------------------+---------+--------+
| id | name | prev_id | tree |
+----+------------------------------------+---------+--------+
| 70 | test | 0 | |
| 71 | test 1 | 70 | 70 |
| 72 | test 2 | 70 | 70 |
| 73 | test 1.1 | 71 | 70, 71 |
| 74 | test 1.2 | 71 | 70, 71 |
| 77 | test 2.2 | 72 | 70, 72 |
+----+------------------------------------+---------+--------+
есть 2 запроса:
1) select tree from horse_cat_tree where id=74
+--------+
| tree |
+--------+
| 70, 71 |
2) select name from horse_cat_tree where id in (70,71);
+--------+
| name |
+--------+
| test |
| test 1 |
+--------+
объединяю эти 2 запроса в один
select name from horse_cat_tree where id in (select tree from horse_cat_tree where id=74);
+------+
| name |
+------+
| test |
+------+
в результате получаем 1 строку, а должно быть две, что я сделал не правильно????
Неактивен
Не нужно хранить данные в VARCHAR через запятую. Когда данные
хранятся в таком формате, Вы можете делать выборки только через
клиентское приложение. В данном случае Вы еще и игнорируете пре-
дупреждение, в котором написано, что строка «70,71» приведена к
числу (0).
Неактивен
Тогда как правильно организовать хранение. Мне нужно получить имена всех родительских узлов, за один проход и в том порядке, в котором записаны идентификаторы в "tree".
Делать несколько вызовов не рентабельно, .
Test (id 2)
Test 1 (id 100)
Test 2 (id 48)
Test 3 (id 99)
Test 4 (id 1)
И .т.д
Неактивен
Спасибо за оперативный ответ.
Проблему решил следующим образом:
Неактивен