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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Упорядочить мысли и код

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: нужен help!
mr.cheese
Отправлено: 20 Ноября, 2011 - 15:52:51
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Итак, задача удалить из поля таблицы все надписи включенные в теги <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.  


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

вопщем жду наводок, ссылок, хороших подсказок... сам уже закипел за день....
 
 Top
mr.cheese
Отправлено: 20 Ноября, 2011 - 20:36:40
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




где же вы светлые головы с SQL познаниями?
 
 Top
Runet4ik
Отправлено: 20 Ноября, 2011 - 20:55:38
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  
Откуда: Россия


Помог: 0 раз(а)




$my_name = mysql_query ( 'UPDATE 'my_table' SET 'my_name' = 'тут то на что хочешь обновить' '' WHERE 'my_name' = '$my_name '
 
 Top
Panoptik
Отправлено: 20 Ноября, 2011 - 21:04:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а чего вы при обновлении вставляете $my_name, а не $my_name[1]?
(Добавление)
вообще если вы не уверены, то выводите сперва запрос, перед тем как его выполнить в функции mysql_query - это раз. Посмотрев на глазок что всё вроде бы неплохо выполняйте запрос, и если уж тут чтото не получается, то не грех заглянуть в ошибки mysql, то бишь вывести mysql_error(), а там видно, что делать и в какую сторону копать


-----
Just do it
 
 Top
tuareg
Отправлено: 20 Ноября, 2011 - 21:21:57
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Я бы вообще предложил, для начала вспомнить, что MySql тоже поддерживает регулярные выражения.
И тогда мы ограничимся одним запросом
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `my_table` SET `my_name`=тут регулярка с функцией(`my_name`)
  3.  

И все как бы. Так по идее должно быть оптимальней, т.к
всего один запрос(правда он тяжеленький),но лучше, чем запросы в цикле
Ф-и для работы с регулярными выражениями посмотрите сами.
 
 Top
mr.cheese
Отправлено: 20 Ноября, 2011 - 21:34:52
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




tuareg пишет:
Я бы вообще предложил, для начала вспомнить, что MySql тоже поддерживает регулярные выражения.
И тогда мы ограничимся одним запросом
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `my_table` SET `my_name`=тут регулярка с функцией(`my_name`)
  3.  

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


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


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




что то не получается

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

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


CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `my_table` SET `my_name`='тут регулярка с функцией(`my_name`)';
 
 Top
tuareg
Отправлено: 21 Ноября, 2011 - 09:08:55
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




А так не пробовали?
http://www[dot]google[dot]ru/search?rlz=[dot][dot][dot]0%B8%D1%8F+mysql

(Отредактировано автором: 21 Ноября, 2011 - 09:09:13)

 
 Top
mr.cheese
Отправлено: 21 Ноября, 2011 - 10:28:30
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




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
 
 Top
tuareg
Отправлено: 21 Ноября, 2011 - 13:51:36
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Правильно, регулярку придется переписать под MySql. Там они не такие(другой стандарт POSIX). Вообще попытайтесь найти поиском(GOOGLE например) примеры. Я, если честно, ни разу не пользовался этой функцией. Вообще совет спросите на http://sqlinfo[dot]ru/forum/ .
Я просто знаю, что это возможно и будет лучше(оптимальней), если вообще ни как не получится, тогда пишите. Сделаем на PHP
 
 Top
snikers987
Отправлено: 21 Ноября, 2011 - 14:18:42
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Цитата:
near 'REGEXP "#(?<=<h)(.*)>(.*)(?=</h1>)#i" LIMIT 0 , 30' at line 3


В POSIX нет модификаторов


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
mr.cheese
Отправлено: 21 Ноября, 2011 - 15:16:41
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




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 день...
 
 Top
tuareg
Отправлено: 21 Ноября, 2011 - 15:31:45
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Дамп таблицы выложитите
 
 Top
mr.cheese
Отправлено: 21 Ноября, 2011 - 15:53:22
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




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


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

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

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

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


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

не травиться какие то теги... какое вопще дело синтаксису SQL до изменений в моей табле?
 
 Top
Bio man
Отправлено: 21 Ноября, 2011 - 16:39:36
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




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
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB