Сразу к делу.
Имеем таблицу в базе 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) | ||
Я правильно понимаю, что это - набор неких параметров? Если да, то тогда надо переделывать структуру БД, "нормализовать" её. Чтобы в итоге одному такому параметру соответствовала всего одна строка в отдельньной таблице, а набору из 5 параметров - 5 строк. |
Хотелось бы решить Эту задачу
Долго думал, перед тем как создать такую структуру. В моём случае такой подход удобней.
Да и время покажет, сейчас проблема в запятой.
Спустя 18 минут, 11 секунд (24.01.2012 - 18:44) sergeiss написал(а):
Цитата (Arh @ 24.01.2012 - 19:26) |
Долго думал, перед тем как создать такую структуру. |
Ты не поверишь... Но мне лично даже думать "в лом" над неправильно поставленной задачей Потому что можно много чего напридумывать. Можно даже свою БД сделать, с нуля. Но ЗАЧЕМ? Есть же уже отработанные решения.
Спустя 7 минут, 11 секунд (24.01.2012 - 18:51) alexbel2404 написал(а):
ну тогда хранимки)
http://thenoyes.com/littlenoise/?p=140
там получается временная таблица, из нее уже можно удалить что нужно, потом с помощь concat_ws склеиваешь обратно и делаешь update своей таблицы.
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
Правильная через 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, не правильной, а именно нормальной уже влечёт за собой нарушение производительности работы с БД.
Я не могу потому, что:
- Структура базы огромная, и уже поздно что-то переделывать;
- Финансы за выполнение этого проекта достаточно низкие, чтобы менять архитектуру проекта;
- Я нифига не понял, что вы сказали и руки у меня из попы растут;
- Начальник приказал сделать на уровне MySQL;
- Это школьная/университетская программа, надо выполнить домашку;
И причин, почему люди не могут выполнить так или так - миллионы. Тебе мало примеров, но ты выбрал лишь тот, который подходит, видимо, ближе к тебе. Заметь, это твой выбор, а не мой. В моих то словах говорится про "неизвестный мне факт причины невозможности выполнить адекватно это задание", а вот то, как ты это расценил, и то, что увидел в словах грубость - тараканы в твоей голове.
К тому же это абсолютно верных подход, потому что таким образом ты снимешь нагрузку на сервер, а не прогонять будешь строку регуляркой. 2 мелких запроса выполнятся в 10 раз быстрее, чем один на регулярку и анализ данных с дальнейшим её изменением. Это вопрос из оптимизации структуры БД. В любом случае нарушение ПЕРВОЙ НОРМАЛЬНОЙ ФОРМЫ SQL, не правильной, а именно нормальной уже влечёт за собой нарушение производительности работы с БД.
Спустя 37 минут, 7 секунд (25.01.2012 - 12:50) Arh написал(а):
Просто там допустим 1к строк надо исправить.
1) Сделать SELECT, получить массив со строками.
2) Разобрать массив через explode
3) Убрать циферку, собрать через implode
4) циклом сделать 1к UPDATE ? (тут не уверен, но на первый взгляд О_о)
Кода кода, и еще раз кода, что бы удалить циферку процедурой, которая отработает всего пару раз за всю историю жизни скрипта
Конечно сделать табличку и хранить там ссылки на id это правильно, мне можно не объяснять , но ребят мне реально тут так удобней
1) Сделать SELECT, получить массив со строками.
2) Разобрать массив через explode
3) Убрать циферку, собрать через implode
4) циклом сделать 1к UPDATE ? (тут не уверен, но на первый взгляд О_о)
Кода кода, и еще раз кода, что бы удалить циферку процедурой, которая отработает всего пару раз за всю историю жизни скрипта
Конечно сделать табличку и хранить там ссылки на id это правильно, мне можно не объяснять , но ребят мне реально тут так удобней
Цитата |
Но мне лично даже думать "в лом" над неправильно поставленной задачей |
Надо было мне в начале темы написать "В помещение нужно попасть через дверь, варианты залезть через окно или камин не рассматриваются, сосредоточьтесь на двери"
А вам нужно было написать "Взять топор, раздолбать дверь, войти. Но всё же лучше через окно"
Как то много писанины, пойду лучше быдлокодить.
Спустя 19 минут, 40 секунд (25.01.2012 - 13:10) inpost написал(а):
В любом случае я посоветовал то, что сделал бы я, особенно если учесть, что код пару раз в жизни отработается.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2