|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.09.2011, 15:32 | #1 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 14
|
Сложный запрос для MySQL
День добрый.
Подскажите как правильно вызвать функцию UPDATE если в таблице данных категорий есть id (номер категории) parent (родительская категория) title (название категории) text (просто поле) Так вот. Мне желательно одним запросом изменить поле text у выбранной категории и всех категорий идущей в ней ниже по иерархии. Т.е. $db->super_query( "UPDATE `" . PREFIX . "_shop_category` SET `text` = '$text' WHERE `id` = '$id' or `parent` = '$id';" ); затронет лишь саму категорию и категории на 1 уровень ниже. Но категории включенные в дочерние категории он не затронет, что в моем случае не правильно. Как максимально упростить себе задачу, не выдумывая кучу лишних запросов на id дочерних категорий и правку их внутренних категорий до бесконечности |
07.09.2011, 15:46 | #2 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,160
|
максимально облегчить - не обновлять таким образом поле текст.... зачем это? подумайте еще раз можно ли обойтись без этого.
|
07.09.2011, 15:50 | #3 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 14
|
А как тогда минимизировать затраты человеческого времени.
Есть интернет-магазин. Есть не фиксированная цена, а наценка. Заказчик желает видеть возможность установки процента для все категорий, и для каждой категории по отдельности. Допустим все товары - категория 1 - категория 2 - категория 3 -- категория 31 --- категория 311 --- категория 312 -- категория 32 - категория 4 Запросом для всех категорий мы ставим наценку. Потом для категории 3 нам надо другую, включая все категории внутри нее. На приведенном примере выглядит все легко и просто. А представьте что на самом деле у Вас 5 сотен категорий размещенных на 5 уровнях |
07.09.2011, 18:14 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В такой структуре одним UPDATE не обойдешься, только процедуру писать или в триггере на обновление реализовывать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
07.09.2011, 19:43 | #5 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,160
|
я бы обновлял лишь наценку самой категории, а для нахождения текущей наценки на тот или иной товар использовал бы рекурсивную процедуру (не SQL) которая бы шла по дереву вниз до первой категории с установленной наценкой.
Можно конечно и в самой базе менять - но как сказал предыдущий оратор - очень это непросто... читайте теорию про организацию древовидных структур в реляционных БД. Способов там немало ... |
07.09.2011, 22:45 | #6 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 14
|
Большое спасибо за помощь.
Решил вопрос путем множественного цикла Результаты категорий с выбранной родительской категорией записывались в массив по уровню и по номеру, далее по порядку они сканировались на свои дочерние категории и таким же методом записывались. Процесс шел до момента когда дочерних категорий нет, и тогда система поднималась на уровень верх к следующему результату. Последний раз редактировалось fioru; 07.09.2011 в 22:47. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
один mysql запрос для двух рядов. | dimron | PHP | 4 | 09.06.2011 15:21 |
Сложный запрос | templton | Microsoft Office Access | 8 | 21.04.2011 13:43 |
SQL запрос в MYSQL для интервала дат | slips | SQL, базы данных | 7 | 05.06.2010 21:41 |
Сложный запрос | Lianchik | Помощь студентам | 1 | 01.03.2010 17:16 |
Помогите создать сложный запрос (или как писать код для столбца запроса) | kukuanna | Microsoft Office Access | 0 | 24.07.2009 14:10 |