[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: кол-во элементов разделенных элементов в одной стр
blazze
Доброго времени суток, подскажите пожалуйста есть ли способы посчитать колличество элементов разделенными запятыми в MySQL, суть вопроса: в таблице есть поле где хранится путь, выглядит это примерно так 24,345,11,1080,504. пути могут быть от одного элемента ну и впринципе до бесконечности, есть ли способ запроссом получить элемент или группу элементов в котором колличество этих элементов наибольшее, т.е. нужно получить максимальную глубину вложения.

зараннее благодарен за советы.



Спустя 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 написал(а):
та структура там нормальная, просто этот проект не стандартный немного и получается что разные категории требуют разных запроссов. т.е. если я нахожусь на верхних уровнях вложенности там идут подзапроссы для вычисления среднестатистических данных ближе к низу уже через джоины. делается это чтобы правильно фильтры работали. вариант с эсплодом не подходит. т.к. перебирать непонятно какое кол-во элементов плохая затея.. лучше уже тогда добавить ещеполе отвечающее за глубину вложенности и простенький триггер. просто хотелось легкого пути sad.gif

Спустя 54 минуты, 28 секунд (29.09.2011 - 23:00) Лена написал(а):
Все равно у вас структура базы неправильная. Вы про уровни нормализации БД слышали? Их 6. У вас нарушена ПЕРВАЯ нормальная форма. Это минимум.
Или я не совсем верно поняла. Допустим, в базе две строки одного поля.
Первая - 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 запятых smile.gif
А по скорости - думать надо.
Или банально выбрать все записи, и 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. всех потомков я выбрать могу без проблем, но они мне как бы сейчас не нужны, нужно знать максимальный уровень вложенности относительнрго любого элемента smile.gif собственно интересорвал вопрос а можно ли как-то по хитрому однми запроссом посчитать кол-во запятых в поле unsure.gif

Спустя 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 написал(а):
Цитата (blazze @ 29.09.2011 - 23:06)
та структура там нормальная

Спустя 5 часов, 38 минут, 52 секунды (30.09.2011 - 16:34) imbalance_hero написал(а):
Guest
50000,50000
1,1,1,1

У тебя первый вариант будет длиннее, а надо второй smile.gif


_____________
On this planet You will die..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.