

Вычисление, чтобы удалить 1 слово из всех записей в таблице
#1
Отправлено 28 Июнь 2017 - 12:41
мне нужно у всех записей в поле $line['f3751'] таблицы 341 убрать слово " язык" (с пробелом перед словом)
в выпадающем списке я меняю значения (убираю слово язык, чтобы было просто английский, немецкий...). у существующих записей чтобы убрать, нужно только sql запрос выполнить, т.к. в этом поле можно выбрать несколько значений и простым массовым редактированием не вывернуться
#2
Отправлено 28 Июнь 2017 - 15:14
d654525 (28 Июнь 2017 - 12:41) писал:
мне нужно у всех записей в поле $line['f3751'] таблицы 341 убрать слово " язык" (с пробелом перед словом)
в выпадающем списке я меняю значения (убираю слово язык, чтобы было просто английский, немецкий...). у существующих записей чтобы убрать, нужно только sql запрос выполнить, т.к. в этом поле можно выбрать несколько значений и простым массовым редактированием не вывернуться
$sql_upd = " UPDATE `".DATA_TABLE."341` upd, `".DATA_TABLE."341` p SET upd.`f3751` = REPLACE(p.`f3751`,' язык','') WHERE upd.`id` = p.`id` AND upd.`f3751` LIKE('% язык%') "; $res_upd = sql_query($sql_upd);А если нужно изменить какую то одну, конкретную стоку то добавьте в самый конец запроса еще оно условие
" AND upd.`id` = XXX"
где ХХХ - id нужной записи
Сообщение отредактировал maksn: 28 Июнь 2017 - 15:29
#3
Отправлено 29 Июнь 2017 - 08:36
maksn (28 Июнь 2017 - 15:14) писал:
$sql_upd = " UPDATE `".DATA_TABLE."341` upd, `".DATA_TABLE."341` p SET upd.`f3751` = REPLACE(p.`f3751`,' язык','') WHERE upd.`id` = p.`id` AND upd.`f3751` LIKE('% язык%') "; $res_upd = sql_query($sql_upd);А если нужно изменить какую то одну, конкретную стоку то добавьте в самый конец запроса еще оно условие
" AND upd.`id` = XXX"
где ХХХ - id нужной записи
отлично работает! спасибо большое! кто не знает, это можно в допдействие в вычисление сохранить.
Сообщение отредактировал d654525: 29 Июнь 2017 - 08:37
#4
Отправлено 29 Июнь 2017 - 17:34
$line['f3751'] = mb_ereg_replace(" язык", "", $line['f3751']);
#5
Отправлено 29 Июнь 2017 - 18:44
CbCoder (29 Июнь 2017 - 17:34) писал:
$line['f3751'] = mb_ereg_replace(" язык", "", $line['f3751']);
А Ваш код обработает только одну, текущую запись.
Если в таблице пара-тройка тысяч записей, ваш код будет вызывать UPDATE столько же тысяч раз. Он будет срабатывать, даже если искомой подстроки там нет
Сообщение отредактировал maksn: 29 Июнь 2017 - 20:53
#6
Отправлено 30 Июнь 2017 - 12:24
#7
Отправлено 30 Июнь 2017 - 20:58
CbCoder (30 Июнь 2017 - 12:24) писал:
Честно говоря не думал, что тут нужно что то объяснять. Но похоже надо.
Итак. Делаем доп. действие со ВСПЛЫВАЮЩИМ окном. Это обязательно
Вставляем туда вот такой код
$need_table_id = 341;//ID таблицы.Если по другой таблице, то подставить соответствующий ID if((isset($_POST['process']))&&(intval($_POST['process'])==1)) { //Нажата кнопка Заменить $from_str = $_POST['from_str']; $to_str = $_POST['to_str']; $sel_field_id = intval($_POST['need_field']); /****Формируем запрос****/ $sql_upd = " UPDATE `".DATA_TABLE.$need_table_id."` upd, `".DATA_TABLE.$need_table_id."` p SET upd.`f".$sel_field_id."` = REPLACE(p.`f".$sel_field_id."`,'".$from_str."','".$to_str."') WHERE upd.`id` = p.`id` AND upd.`f".$sel_field_id."` LIKE('%".$from_str."%') "; $res_upd = sql_query($sql_upd); } ?> <form name=execute id=execute action="" method="post" enctype=multipart/form-data> <table width=400 border=0> <tr> <td width="100%"> Заменить: <input type=text name=from_str size=30 value=""> </td> </tr> <tr> <td width="100%"> </td> </tr> <tr> <td width="100%"> На: <input type=text name=to_str size=30 value=""> </td> </tr> <tr> <td width="100%"> </td> </tr> <tr> <td width="100%"> Выбираем поле: <SELECT name=need_field> <? /**** Сфорируем SELECT со списком текстовых полей в выбранной таблице*******/ $sql_fields =" SELECT `id`,`name_field`,`field_num` FROM `".FIELDS_TABLE."` WHERE `table_id` = ".$need_table_id." AND `type_field`=3 ORDER BY `field_num` "; $res_fields = sql_query($sql_fields); while($row_fields=sql_fetch_assoc($res_fields)) { ?> <option value="<? echo $row_fields['id']; ?>"><? echo $row_fields['name_field']; ?></option> <? } ?> </SELECT> </td> </tr> <tr> <td width="100%"> <input type hidden name=process value=1> <input type hidden name=csrf value="<? echo $csrf; ?>"> </td> </tr> <tr> <td width="100%" align=right> <input type=submit value="Заменить" </td> </tr> </table>Будет всплывать форма, в которой можно указать фразу, которую нужно заменить, фразу на которую меняем и текстовое поле, в котором нужно произвести замену.
Нажимаем "Заменить" и во ВСЕХ записях выбранного поля будет произведена замена ОДНИМ запросом.
Запускать ДД можно из любой записи текущей таблицы
Ваш же код может быть применен только один раз. После того, как он отработает, исчезнет смысл иметь его. Искомой фразы уже не будет
Да и производительность его оставляет желать лучшего.
Вот собственно за этим я и "сочинял запрос". Но Вы правы в одном - лучше все это проделать в edit_sql.php один раз и забыть.
Сообщение отредактировал maksn: 30 Июнь 2017 - 22:17
#8
Отправлено 02 Июль 2017 - 13:17
Количество пользователей, читающих эту тему: 4
0 пользователей, 4 гостей, 0 анонимных