зараннее благодарен за советы.
Спустя 6 минут, 36 секунд (29.09.2011 - 21:43) Winston написал(а):
Доставать эту строку из базы, разбивать
Проверять размер
Ну и потом на основании этих данных доставать из базы наибольшее..
$path = explode(',', $row['path'])
Проверять размер
sizeof($path);
Ну и потом на основании этих данных доставать из базы наибольшее..
Спустя 9 минут, 51 секунда (29.09.2011 - 21:53) Лена написал(а):
В MySQL такое только через процедуры можно сделать, но оно этого не стоит, код сложный.
Может, попробовать как-то нормализовать БД?
Может, попробовать как-то нормализовать БД?
Спустя 12 минут, 56 секунд (29.09.2011 - 22:06) blazze написал(а):
та структура там нормальная, просто этот проект не стандартный немного и получается что разные категории требуют разных запроссов. т.е. если я нахожусь на верхних уровнях вложенности там идут подзапроссы для вычисления среднестатистических данных ближе к низу уже через джоины. делается это чтобы правильно фильтры работали. вариант с эсплодом не подходит. т.к. перебирать непонятно какое кол-во элементов плохая затея.. лучше уже тогда добавить ещеполе отвечающее за глубину вложенности и простенький триггер. просто хотелось легкого пути

Спустя 54 минуты, 28 секунд (29.09.2011 - 23:00) Лена написал(а):
Все равно у вас структура базы неправильная. Вы про уровни нормализации БД слышали? Их 6. У вас нарушена ПЕРВАЯ нормальная форма. Это минимум.
Или я не совсем верно поняла. Допустим, в базе две строки одного поля.
Первая - 24,345,11,1080
Вторая - 24,345,11,1080,504
Это значит, что у первой строки категория - родитель категории второй строки.
Обычно поле parent используется, чтобы показать родителей и потомков и тогда поле level вам не нужно будет и у каждого родителя можно средствами MySQL легко посчитать потомков.
Или я не совсем верно поняла. Допустим, в базе две строки одного поля.
Первая - 24,345,11,1080
Вторая - 24,345,11,1080,504
Это значит, что у первой строки категория - родитель категории второй строки.
Обычно поле parent используется, чтобы показать родителей и потомков и тогда поле level вам не нужно будет и у каждого родителя можно средствами MySQL легко посчитать потомков.
Спустя 1 час, 57 минут, 15 секунд (30.09.2011 - 00:57) inpost написал(а):
Если запятых штуки 4 максимум, то можно идти от обратного:
SELECT `id`... WHERE `line` LIKE '%,%,%,%,%' LIMIT 1, 4 запятых, если вернётся count=0, значит 3 запятых
А по скорости - думать надо.
Или банально выбрать все записи, и exlode+count, если записей не очень много, их можно вообще кешировать.
SELECT `id`... WHERE `line` LIKE '%,%,%,%,%' LIMIT 1, 4 запятых, если вернётся count=0, значит 3 запятых

А по скорости - думать надо.
Или банально выбрать все записи, и exlode+count, если записей не очень много, их можно вообще кешировать.
Спустя 6 часов, 26 минут, 48 секунд (30.09.2011 - 07:24) blazze написал(а):
Цитата (Лена @ 29.09.2011 - 20:00) |
..... Первая - 24,345,11,1080 Вторая - 24,345,11,1080,504 Это значит, что у первой строки категория - родитель категории второй строки. .... |
У меня есть поле перент айди, эти пути что я указал называются materialized path. всех потомков я выбрать могу без проблем, но они мне как бы сейчас не нужны, нужно знать максимальный уровень вложенности относительнрго любого элемента


Спустя 16 минут, 5 секунд (30.09.2011 - 07:40) linker написал(а):
Нормализуем базы данных, т.е. избавляемся от строковых перечисляемых данных. Должно быть: одна ячейка - одно значение. Выносим в отдельную таблицу и связываем.
Спустя 2 часа, 55 минут, 46 секунд (30.09.2011 - 10:36) Guest написал(а):
вобщем решается такая задача вот таким запроссом:
всем спасибо за внимание :)
SELECT category_path, LENGTH(category_path), LENGTH(REPLACE(category_path, ',', ''))
, LENGTH(category_path) - LENGTH(REPLACE(category_path, ',', '')) AS num
FROM categories
ORDER BY num DESC
LIMIT 1;
всем спасибо за внимание :)
Спустя 18 минут, 51 секунда (30.09.2011 - 10:55) neadekvat написал(а):
Спустя 5 часов, 38 минут, 52 секунды (30.09.2011 - 16:34) imbalance_hero написал(а):
Guest
50000,50000
1,1,1,1
У тебя первый вариант будет длиннее, а надо второй
50000,50000
1,1,1,1
У тебя первый вариант будет длиннее, а надо второй

_____________
On this planet You will die..