Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Упорядочить мысли и код
Форумы портала PHP.SU » » Работа с СУБД » Упорядочить мысли и код

Страниц (2): [1] 2 »
 

1. mr.cheese - 20 Ноября, 2011 - 15:52:51 - перейти к сообщению
Итак, задача удалить из поля таблицы все надписи включенные в теги <h3>
т.к. средствами sql запроса это сделать проблематично
я начал быдлокодить


после скитаний по гуглу:
PHP:
скопировать код в буфер обмена
  1. preg_replace("#(?<=<h3)(.*)>(.*)(?=</h3>)#i", "", $my_name);

нашел готовую регулярку которая убирает теги, затестил ее на своих примерах, вроде работает.

но с sql все оказалось куда сложнее, а может и проще...но не для меня


PHP:
скопировать код в буфер обмена
  1.  
  2. $myconnect=mysql_connect($host,$user,$pass)or die ("Соединение не установлено" .mysql_error());
  3. //echo "Соединение установлено. Сегодня:&nbsp;". date("d-m-Y")."<br>";
  4. mysql_select_db($dbname);
  5. // mysql_query("SET NAMES 'UTF8'");  
  6. mysql_query("SET NAMES 'cp1251'"); // в случаях проблем с кодировкой
  7.  
  8.  
  9. $my_name = mysql_query('SELECT COUNT( * ) AS `Строки` , `my_name`
  10. FROM `my_table`
  11. GROUP BY `my_name`
  12. ORDER BY `my_name` ')or die(mysql_error());
  13.  
  14. $my_name = mysql_fetch_array ($my_name);
  15. // или лучше перевести в строки? т.к. полей в таблице много
  16. $my_name[1] = preg_replace("#(?<=<h3>)(.*)>(.*)(?=</h3>)#i", "", $my_name[1]);
  17. // совершается собвенно замена тегов
  18.  
  19. //а теперь суть вопроса, как правильно сохранить результат моих потуг
  20. $my_name = mysql_query('UPDATE `my_table` SET `my_name` WHERE `my_name`='$my_name' ')or die(mysql_error());
  21.  


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

вопщем жду наводок, ссылок, хороших подсказок... сам уже закипел за день....
2. mr.cheese - 20 Ноября, 2011 - 20:36:40 - перейти к сообщению
где же вы светлые головы с SQL познаниями?
3. Runet4ik - 20 Ноября, 2011 - 20:55:38 - перейти к сообщению
$my_name = mysql_query ( 'UPDATE 'my_table' SET 'my_name' = 'тут то на что хочешь обновить' '' WHERE 'my_name' = '$my_name '
4. Panoptik - 20 Ноября, 2011 - 21:04:13 - перейти к сообщению
а чего вы при обновлении вставляете $my_name, а не $my_name[1]?
(Добавление)
вообще если вы не уверены, то выводите сперва запрос, перед тем как его выполнить в функции mysql_query - это раз. Посмотрев на глазок что всё вроде бы неплохо выполняйте запрос, и если уж тут чтото не получается, то не грех заглянуть в ошибки mysql, то бишь вывести mysql_error(), а там видно, что делать и в какую сторону копать
5. tuareg - 20 Ноября, 2011 - 21:21:57 - перейти к сообщению
Я бы вообще предложил, для начала вспомнить, что MySql тоже поддерживает регулярные выражения.
И тогда мы ограничимся одним запросом
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `my_table` SET `my_name`=тут регулярка с функцией(`my_name`)
  3.  

И все как бы. Так по идее должно быть оптимальней, т.к
всего один запрос(правда он тяжеленький),но лучше, чем запросы в цикле
Ф-и для работы с регулярными выражениями посмотрите сами.
6. mr.cheese - 20 Ноября, 2011 - 21:34:52 - перейти к сообщению
tuareg пишет:
Я бы вообще предложил, для начала вспомнить, что MySql тоже поддерживает регулярные выражения.
И тогда мы ограничимся одним запросом
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `my_table` SET `my_name`=тут регулярка с функцией(`my_name`)
  3.  

И все как бы. Так по идее должно быть оптимальней, т.к
всего один запрос(правда он тяжеленький),но лучше, чем запросы в цикле
Ф-и для работы с регулярными выражениями посмотрите сами.


вот тут очень круто! спасиб сейчас затестирую!
7. mr.cheese - 21 Ноября, 2011 - 08:19:53 - перейти к сообщению
что то не получается

если пишу preg_replace то: #1305 - FUNCTION my_table.preg_replace does not exist

если добавляю ' ' - все заменяет


CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `my_table` SET `my_name`='тут регулярка с функцией(`my_name`)';
8. tuareg - 21 Ноября, 2011 - 09:08:55 - перейти к сообщению
А так не пробовали?
http://www[dot]google[dot]ru/search?rlz=[dot][dot][dot]0%B8%D1%8F+mysql
9. mr.cheese - 21 Ноября, 2011 - 10:28:30 - перейти к сообщению
tuareg пишет:


#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REGEXP "#(?<=<h)(.*)>(.*)(?=</h1>)#i" LIMIT 0 , 30' at line 3
10. tuareg - 21 Ноября, 2011 - 13:51:36 - перейти к сообщению
Правильно, регулярку придется переписать под MySql. Там они не такие(другой стандарт POSIX). Вообще попытайтесь найти поиском(GOOGLE например) примеры. Я, если честно, ни разу не пользовался этой функцией. Вообще совет спросите на http://sqlinfo[dot]ru/forum/ .
Я просто знаю, что это возможно и будет лучше(оптимальней), если вообще ни как не получится, тогда пишите. Сделаем на PHP
11. snikers987 - 21 Ноября, 2011 - 14:18:42 - перейти к сообщению
Цитата:
near 'REGEXP "#(?<=<h)(.*)>(.*)(?=</h1>)#i" LIMIT 0 , 30' at line 3


В POSIX нет модификаторов
12. mr.cheese - 21 Ноября, 2011 - 15:16:41 - перейти к сообщению
POSIX что то гугл готовых решений не выдает....

ну я не сдаюсь...


PHP:
скопировать код в буфер обмена
  1. $myconnect=mysql_connect($host,$user,$pass)or die ("Соединение не установлено" .mysql_error());
  2. //echo "Соединение установлено. Сегодня:&nbsp;". date("d-m-Y")."<br>";
  3. mysql_select_db($dbname);
  4. // mysql_query("SET NAMES 'UTF8'");  
  5. mysql_query("SET NAMES 'cp1251'");
  6.  
  7. $te = mysql_query('SELECT `id`, `extended`
  8. FROM `my_table` ORDER BY `id` DESC
  9. ')or die(mysql_error());
  10.  
  11.  
  12. while ($data = mysql_fetch_array ($te))
  13.  
  14. { $data['extended'] = preg_replace("#(?<=<h1)(.*)>(.*)(?=</h1>)#i", "", $data['extended']);
  15.  echo "<br>";
  16.  echo $data['id'];
  17. mysql_query("UPDATE my_table SET extended='".$data['extended']."' WHERE id='".$data['id']."' ")or die(mysql_error());
  18.  
  19. }
  20.  


и вот же зараза хорошо работает на ~50 id
а на 51

CODE (htmlphp):
скопировать код в буфер обмена
  1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/a>.
  2.  
  3. ' WHERE id='6929'' at line 1


просто руки уже опускаются - 4 день...
13. tuareg - 21 Ноября, 2011 - 15:31:45 - перейти к сообщению
Дамп таблицы выложитите
14. mr.cheese - 21 Ноября, 2011 - 15:53:22 - перейти к сообщению
tuareg пишет:
Дамп таблицы выложитите


большая она... Недовольство, огорчение

я перескакиваю эти ошибки... но геморно постоянно его менять

CODE (SQL):
скопировать код в буфер обмена
  1. LIMIT %bad id +1%, 18446744073709551615;

(Добавление)
tuareg пишет:
Дамп таблицы выложитите


все дело в значниях таблицы, вылетает именно на UPDATE...
удаляю все поле, работает до следущего вылета...

не травиться какие то теги... какое вопще дело синтаксису SQL до изменений в моей табле?
15. Bio man - 21 Ноября, 2011 - 16:39:36 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $query = "PREPARE `update` FROM
  2.                         'UPDATE `my_table` SET `extended`=? WHERE `id`=?'";
  3. while ($data = mysql_fetch_array ($te)){
  4.         $data['extended'] = preg_replace("#(?<=<h1)(.*)>(.*)(?=</h1>)#i", "", $data['extended']);
  5.         echo "<br>";
  6.         echo $data['id'];
  7.         mysql_query("SET @`extended` = '{$data['extended']}'");
  8.         mysql_query("SET @`id` = {$data['id']}");
  9.         mysql_query("EXECUTE `update` USING @`extended`, @`id`") or die(mysql_error());
  10. }

попробуй так, нагрузка меньше будет на MySQL

 

Powered by ExBB FM 1.0 RC1