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 » » Вопросы новичков » Есть ли возможность как-то сократить эту запись.

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

1. livote - 15 Сентября, 2014 - 20:58:56 - перейти к сообщению
Есть ли возможность как-то сократить эту запись.

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. ");
2. Мелкий - 15 Сентября, 2014 - 21:06:46 - перейти к сообщению
Загоните в массив setting_name=>setting_value и пройдите foreach'ом.
3. armancho7777777 - 15 Сентября, 2014 - 23:46:38 - перейти к сообщению
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.   )
4. esterio - 16 Сентября, 2014 - 01:03:10 - перейти к сообщению
armancho7777777
насколько такой запрос теоретически быстрее нескольких не подскажете?
5. armancho7777777 - 16 Сентября, 2014 - 03:59:35 - перейти к сообщению
Не проверял, но думаю так:
в любом случае производится сравнение (WHERE/CASE), но в последнем случае запрос к серверу всего один.
(Добавление)
armancho7777777 пишет:
Не проверял

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

в данном случае экономия на спичках
(Добавление)
у меня кстати тоже есть страница настроек. проблему лишних запросов я там решил так
все поля по умолчанию имеют атрибут дисаблед
по событию ончейндж атрибут снимается, таким образом при сабмите я получаю только те значения настроек, которые изменились, и меняю только 2,3, 5 вместо 30, 100
7. Мелкий - 16 Сентября, 2014 - 10:25:08 - перейти к сообщению
Люди, ау! Это страница настроек.
Как часто у вас меняются настройки? Раз в месяц? Откуда там взять хотя бы смехотворную тысячу записей?
Напишите простой и понятный код, а оптимизацией производительности займитесь того кода, который вызывается чуточку чаще.

 

Powered by ExBB FM 1.0 RC1