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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
livote
Отправлено: 15 Сентября, 2014 - 20:58:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Авг. 2012  


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

[+][+]


Есть ли возможность как-то сократить эту запись.

PHP:
скопировать код в буфер обмена
  1. $update_name = mysql_query("
  2. UPDATE settings SET value='$name' WHERE name='name'
  3. ");
  4. $update_desc = mysql_query("
  5. UPDATE settings SET value='$description' WHERE name='description'
  6. ");
  7. $update_adm = mysql_query("
  8. UPDATE settings SET value='$admin_email' WHERE name='admin_email'
  9. ");
  10. $update_meta = mysql_query("
  11. UPDATE settings SET value='$meta_desc' WHERE name='meta_desc'
  12. ");
  13. $update_page = mysql_query("
  14. UPDATE settings SET value='$page_in_list' WHERE name='page_in_list'
  15. ");


-----
Не следует бояться зайти за пределы того, что считается возможным – ибо именно там находится успех.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Сентября, 2014 - 21:06:46
Post Id



Активный участник


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


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




Загоните в массив setting_name=>setting_value и пройдите foreach'ом.


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Сентября, 2014 - 23:46:38
Post Id



Активный участник


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


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




CODE (SQL):
скопировать код в буфер обмена
  1.  UPDATE settings
  2.     SET value = CASE
  3.    WHEN name  = 'name'         THEN '{$name}'
  4.    WHEN name  = 'description'  THEN '{$description}'
  5.    WHEN name  = 'admin_email'  THEN '{$admin_email}'
  6.    WHEN name  = 'meta_desc'    THEN '{$meta_desc}'
  7.    WHEN name  = 'page_in_list' THEN '{$page_in_list}'
  8.     END
  9.   WHERE name IN(
  10.     'name', 'description', 'admin_email',
  11.     'meta_desc', 'page_in_list'
  12.   )

(Отредактировано автором: 15 Сентября, 2014 - 23:51:51)

 
 Top
esterio
Отправлено: 16 Сентября, 2014 - 01:03:10
Post Id



Активный участник


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


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




armancho7777777
насколько такой запрос теоретически быстрее нескольких не подскажете?
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Сентября, 2014 - 03:59:35
Post Id



Активный участник


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


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




Не проверял, но думаю так:
в любом случае производится сравнение (WHERE/CASE), но в последнем случае запрос к серверу всего один.
(Добавление)
armancho7777777 пишет:
Не проверял

... хотя, сейчас проверю.
Есть база под рукой с ~ 100 000 записей.
(Добавление)
Одним запросом быстрее. Даже с указанием лимита 1 в случае с циклом.
Если поля не проиндексированы, то оба варианта долгие.
 
 Top
Panoptik
Отправлено: 16 Сентября, 2014 - 10:09:54
Post Id



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


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


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




тогда уже может проще просто через точку с запятой перечислить все запросы и отдать их субд?

в данном случае экономия на спичках
(Добавление)
у меня кстати тоже есть страница настроек. проблему лишних запросов я там решил так
все поля по умолчанию имеют атрибут дисаблед
по событию ончейндж атрибут снимается, таким образом при сабмите я получаю только те значения настроек, которые изменились, и меняю только 2,3, 5 вместо 30, 100


-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 16 Сентября, 2014 - 10:25:08
Post Id



Активный участник


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


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




Люди, ау! Это страница настроек.
Как часто у вас меняются настройки? Раз в месяц? Откуда там взять хотя бы смехотворную тысячу записей?
Напишите простой и понятный код, а оптимизацией производительности займитесь того кода, который вызывается чуточку чаще.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB