[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: UPDATE
Arh
Всем добрый вечер.

Сразу к делу.

Имеем таблицу в базе mysql.
В таблице стоит значение (строка) 1,2,3,4,5

Задача. Удалить любое число, учитывая запятую.
if (сегодня == скучно) {
$id = 5;
}
else {
$id = 3;
}


UPDATE `access` SET `groups` = REPLACE (`groups`, '".$id."','')


Такой способ заменяет цифру на пустоту, но запятую не учитывает.
Также нельзя заменять цифру с запятой до ",5" или после "5,", так как там может не быть запятой или в таблице вообще будет только цифра 5.



Спустя 2 минуты, 25 секунд (24.01.2012 - 18:00) alexbel2404 написал(а):
не знаю как через sql, но в php можно разбить с помощью explode в массив, удалить не нужное, и сформировать строку по новой, потом только update.

Спустя 8 минут, 50 секунд (24.01.2012 - 18:08) Arh написал(а):
Цитата (alexbel2404 @ 24.01.2012 - 15:00)
не знаю как через sql, но в php можно разбить с помощью explode в массив, удалить не нужное, и сформировать строку по новой, потом только update.

Хотелось бы избежать php в этом случае.

Спустя 7 минут, 32 секунды (24.01.2012 - 18:16) sergeiss написал(а):
Цитата (Arh @ 24.01.2012 - 18:57)
В таблице стоит значение (строка) 1,2,3,4,5

Я правильно понимаю, что это - набор неких параметров? Если да, то тогда надо переделывать структуру БД, "нормализовать" её. Чтобы в итоге одному такому параметру соответствовала всего одна строка в отдельньной таблице, а набору из 5 параметров - 5 строк.

Спустя 9 минут, 41 секунда (24.01.2012 - 18:26) Arh написал(а):
Цитата (sergeiss @ 24.01.2012 - 15:16)
Цитата (Arh @ 24.01.2012 - 18:57)
В таблице стоит значение (строка) 1,2,3,4,5

Я правильно понимаю, что это - набор неких параметров? Если да, то тогда надо переделывать структуру БД, "нормализовать" её. Чтобы в итоге одному такому параметру соответствовала всего одна строка в отдельньной таблице, а набору из 5 параметров - 5 строк.

Хотелось бы решить Эту задачу smile.gif
Долго думал, перед тем как создать такую структуру. В моём случае такой подход удобней.
Да и время покажет, сейчас проблема в запятой.

Спустя 18 минут, 11 секунд (24.01.2012 - 18:44) sergeiss написал(а):
Цитата (Arh @ 24.01.2012 - 19:26)
Долго думал, перед тем как создать такую структуру.

Ты не поверишь... Но мне лично даже думать "в лом" над неправильно поставленной задачей smile.gif Потому что можно много чего напридумывать. Можно даже свою БД сделать, с нуля. Но ЗАЧЕМ? Есть же уже отработанные решения.

Спустя 7 минут, 11 секунд (24.01.2012 - 18:51) alexbel2404 написал(а):
ну тогда хранимки)

http://thenoyes.com/littlenoise/?p=140
там получается временная таблица, из нее уже можно удалить что нужно, потом с помощь concat_ws склеиваешь обратно и делаешь update своей таблицы.

Спустя 3 минуты, 40 секунд (24.01.2012 - 18:55) Arh написал(а):
Цитата (alexbel2404 @ 24.01.2012 - 15:51)
ну тогда хранимки)

http://thenoyes.com/littlenoise/?p=140
там получается временная таблица, из нее уже можно удалить что нужно, потом с помощь concat_ws склеиваешь обратно и делаешь update своей таблицы.

Спасибо, надо почитать :)
Пока что сделал так:

UPDATE access SET `groups` = TRIM(TRAILING ',' FROM `groups`) , `groups` = REPLACE (groups, ',,',',')

Спустя 42 минуты, 46 секунд (24.01.2012 - 19:37) neadekvat написал(а):
Цитата (Arh @ 24.01.2012 - 19:26)
Хотелось бы решить Эту задачу

А ее решение и заключается в нормализации бд.

Цитата (Arh @ 24.01.2012 - 19:26)
Долго думал, перед тем как создать такую структуру. В моём случае такой подход удобней.

Самому не смешно? Ты приходишь на форум, потому что возникла совершенно бредовая задача, которую ты сам сначала и решить не смог. А говоришь, что удобнее.

Спустя 3 минуты, 7 секунд (24.01.2012 - 19:41) inpost написал(а):
'1,2,3,4,5' - неправильная структура
Правильная через 5 ОТДЕЛЬНЫХ записей:
1
2
3
4
5

Спустя 1 минута, 34 секунды (24.01.2012 - 19:42) inpost написал(а):
Ну а раз ты не можешь сделать ничего правильного, то делай:
SELECT.
explode(',')
unset($array[$k]);
implode(',')
UPDATE

Спустя 14 часов, 23 минуты, 45 секунд (25.01.2012 - 10:06) Arh написал(а):
Цитата (neadekvat @ 24.01.2012 - 16:37)
Самому не смешно? Ты приходишь на форум, потому что возникла совершенно бредовая задача, которую ты сам сначала и решить не смог. А говоришь, что удобнее.

Я пришел на форум узнать решение именно этой проблемы.

Пришел узнать сколько нужно муки добавить в тесто, а вы мне говорите, про то что кухня у меня не такая.

Мистер sergeiss :) в начале темы уже посоветовал как правильней сделать структуру, но заметьте он пену изо рта не пускал и не копипастил чужие предложения.

Цитата
Ну а раз ты не можешь сделать ничего правильного, то делай:

Тут вообще оскорбление, типа руки из жопы у меня. ТЫ во первых мне не тычь, во вторых вы меня не знаете чтоб осуждать правильность моих поступков.
В третьих повышение своей самооценки за счёт оскорбления других, не этично.

SELECT.
explode(',')
unset($array[$k]);
implode(',')
UPDATE


Совсем не верный подход.


Всем спасибо за советы, хоть и скопированные у sergeiss и за критику.

Спустя 2 часа, 6 минут, 59 секунд (25.01.2012 - 12:13) inpost написал(а):
Arh
Я не могу потому, что:
- Структура базы огромная, и уже поздно что-то переделывать;
- Финансы за выполнение этого проекта достаточно низкие, чтобы менять архитектуру проекта;
- Я нифига не понял, что вы сказали и руки у меня из попы растут;
- Начальник приказал сделать на уровне MySQL;
- Это школьная/университетская программа, надо выполнить домашку;

И причин, почему люди не могут выполнить так или так - миллионы. Тебе мало примеров, но ты выбрал лишь тот, который подходит, видимо, ближе к тебе. Заметь, это твой выбор, а не мой. В моих то словах говорится про "неизвестный мне факт причины невозможности выполнить адекватно это задание", а вот то, как ты это расценил, и то, что увидел в словах грубость - тараканы в твоей голове.

К тому же это абсолютно верных подход, потому что таким образом ты снимешь нагрузку на сервер, а не прогонять будешь строку регуляркой. 2 мелких запроса выполнятся в 10 раз быстрее, чем один на регулярку и анализ данных с дальнейшим её изменением. Это вопрос из оптимизации структуры БД. В любом случае нарушение ПЕРВОЙ НОРМАЛЬНОЙ ФОРМЫ SQL, не правильной, а именно нормальной уже влечёт за собой нарушение производительности работы с БД.

Спустя 37 минут, 7 секунд (25.01.2012 - 12:50) Arh написал(а):
Просто там допустим 1к строк надо исправить.
1) Сделать SELECT, получить массив со строками.
2) Разобрать массив через explode
3) Убрать циферку, собрать через implode
4) циклом сделать 1к UPDATE ? (тут не уверен, но на первый взгляд О_о)

Кода кода, и еще раз кода, что бы удалить циферку процедурой, которая отработает всего пару раз за всю историю жизни скрипта smile.gif

Конечно сделать табличку и хранить там ссылки на id это правильно, мне можно не объяснять , но ребят мне реально тут так удобней smile.gif

Цитата
Но мне лично даже думать "в лом" над неправильно поставленной задачей  smile.gif

Надо было мне в начале темы написать "В помещение нужно попасть через дверь, варианты залезть через окно или камин не рассматриваются, сосредоточьтесь на двери" smile.gif
А вам нужно было написать "Взять топор, раздолбать дверь, войти. Но всё же лучше через окно"
Как то много писанины, пойду лучше быдлокодить.

Спустя 19 минут, 40 секунд (25.01.2012 - 13:10) inpost написал(а):
В любом случае я посоветовал то, что сделал бы я, особенно если учесть, что код пару раз в жизни отработается.


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

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