Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Упростить запрос.
 
 автор: kapitalist   (30.05.2014 в 21:03)   письмо автору
 
 

Всем привет. Подскажите, пожалуйста, как упростить запрос.
$update = mysql_query ("UPDATE product SET name='$name', obogrev='$obogrev', mozhohlad='$mozhohlad', obogrev2='$obogrev2', holod='$holod', 
vnutrenniy='$vnutrenniy', naruzhniy='$naruzhniy', gabaritvnutr='$gabaritvnutr', gabaritvnesh='$gabaritvnesh', model='$model', freon2='$freon2', 
tipcond='$tipcond', proizvod='$proizvod', vozduhoobmen='$vozduhoobmen', mozhnost='$mozhnost', razmer_kanala='$razmer_kanala', 
razmer='$razmer', ves='$ves', teploholod='$teploholod', invertor='$invertor', tipvent='$tipvent', tip_vozduh='$tip_vozduh', tipwork='$tipwork', 
vrazhenie='$vrazhenie', zazhita='$zazhita', rab_tok='$rab_tok', napruga='$napruga', temp_vozd='$temp_vozd', str_proizvod='$str_proizvod', 
description='$description', num_code='$num_code', short_name='$short_name', $img sv_tovar='$sv_tovar' WHERE id='$id'");

Это полная фигня. Думаю можно сделать гораздо проще, чем перечислять все переменные. Но, как это сделать я не знаю. Заранее спасибо за ответы.

  Ответить  
 
 автор: confirm   (31.05.2014 в 06:28)   письмо автору
 
   для: kapitalist   (30.05.2014 в 21:03)
 

А каким образом можно догадаться чего вы хотите, если не перечислить? Перечислять придется в любом случае, явно или нет, но придется.

Если охота сделать это "анонимно", то получите имена полей таблицы (причем нужно знать их порядок), отбросьте те, что не участвуют в обновлении (если такие есть), извлеките (с удалением) поле, которое определяет условие. Данные, которые должны быть сопоставлены этим полям, должны быть в той же последовательности, что и поля таблицы. Тогда:

<?
$update 
mysql_query ('UPDATE product SET '.implode(','array_map(function($k$v) { 
        return 
'`'.$k.'`="'.$v.'"'
}, array(
$fields), array($values))).' WHERE id='.$id);

//где $fields массив имен полей таблицы, $values массив соответствующих значений

  Ответить  
 
 автор: kapitalist   (31.05.2014 в 11:53)   письмо автору
 
   для: confirm   (31.05.2014 в 06:28)
 

Спасибо. Попробую сделать так.

  Ответить  
 
 автор: lgar   (31.05.2014 в 20:59)   письмо автору
 
   для: confirm   (31.05.2014 в 06:28)
 

Интересно, почему в документации говорится, что $fields - массив, на деле получается строка, поэтому нужно как в примере делать array($fields)

  Ответить  
 
 автор: confirm   (31.05.2014 в 22:11)   письмо автору
 
   для: lgar   (31.05.2014 в 20:59)
 

Вы о чем?

  Ответить  
 
 автор: lgar   (04.06.2014 в 18:45)   письмо автору
 
   для: confirm   (31.05.2014 в 22:11)
 

где $fields массив имен полей таблицы


Если $fields - массив, то array($fields), это



Array
(
    [0] => Array
        (
            [0] => ?
            [1] => ?
        )

)




В документации




<?php
function cube($n)
{
    return(
$n $n $n);
}

$a = array(12345);
$b array_map("cube"$a);
print_r($b);
?>




Поэтому и возник вопрос, зачем нам массив в массиве.

  Ответить  
 
 автор: confirm   (04.06.2014 в 19:31)   письмо автору
 
   для: lgar   (04.06.2014 в 18:45)
 

Даже после вопроса не удосужился ... )

Да, конечно, не нужны там объявления массива, речь то идет о "ранее подготовленных". Возможно "в уме" изначально имелся план о передаче одного массива в array_map, а потому возможно хотел array_keys(...) и массив, а может... Сейчас уже не установить по какой причине это там осталось.

  Ответить  
 
 автор: lgar   (04.06.2014 в 20:59)   письмо автору
 
   для: confirm   (04.06.2014 в 19:31)
 

Даже после вопроса не удосужился ... )


В моем случае, функция содержала foreach(), поэтому и запутался в 3 соснах. Как бы без лишнего array возникают warnings.

  Ответить  
 
 автор: confirm   (05.06.2014 в 01:31)   письмо автору
 
   для: lgar   (04.06.2014 в 20:59)
 

Это я не удосужился глянуть по какому вопросу ко мне претензии, ибо "Интересно, почему в документации говорится, что $fields - массив, на деле получается строка..." зациклило на другом )

Ну строка понятно почему, потому как внешняя функция implode. Собственно потому чтобы не клеить "внешнюю" строку и выбрана array_map, причем с анонимной функцией.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования