MySql update ?
18 отговора
467 прегледа
MySql update ?
Здравейте.
Имам сленият въпрос:
трябва да направя update на няколко записа в една таблица
update mytable set a=1, b=2 where id=5
update mytable set a=3, b=9 where id=9
......................
Въпросът ми е може ли да стане това само с една заявка.
Опитах да навържа завките в едно query, разделени с ';', но ми дава синтактична грешка след първите ';'
Четох денели книги, но не успях да разбера.
Моля някой да каже. Ще съм много благодарен.
И най-ярките личности си плащат тока.
Имам сленият въпрос:
трябва да направя update на няколко записа в една таблица
update mytable set a=1, b=2 where id=5
update mytable set a=3, b=9 where id=9
......................
Въпросът ми е може ли да стане това само с една заявка.
Опитах да навържа завките в едно query, разделени с ';', но ми дава синтактична грешка след първите ';'
Четох денели книги, но не успях да разбера.
Моля някой да каже. Ще съм много благодарен.
И най-ярките личности си плащат тока.
Re: MySql update ?
Не казваш ясно какво точно се опитваш да направиш.
Какво имаш предвид под едно query? Как си подаваш куеритата - през пхпМайАдмин, от друг някой скрипт, с обикновен клиент от командния ред, по друг начин?
So long and thanks for all the fish!

Какво имаш предвид под едно query? Как си подаваш куеритата - през пхпМайАдмин, от друг някой скрипт, с обикновен клиент от командния ред, по друг начин?
So long and thanks for all the fish!
Re: MySql update ?
Правя следният опит:
$query = 'update mytable set a=1, b=2 where id=5 ;
update mytable set a=3, b=9 where id=9 ;';
mysql_query($query);
И MySql дава синтактична грешка на първите ';'. $query се формира от цикъл и искам да направя всички поправки с една заявка. До колкото знам, MySql изпълнява така съставени заявки, но защо през PHP не ще, не мога да разбера. А може би греша или не знам верният начин.
И най-ярките личности си плащат тока.
$query = 'update mytable set a=1, b=2 where id=5 ;
update mytable set a=3, b=9 where id=9 ;';
mysql_query($query);
И MySql дава синтактична грешка на първите ';'. $query се формира от цикъл и искам да направя всички поправки с една заявка. До колкото знам, MySql изпълнява така съставени заявки, но защо през PHP не ще, не мога да разбера. А може би греша или не знам верният начин.
И най-ярките личности си плащат тока.
Re: MySql update ?
Спряха го PHP-то да прави такива заявки, защото много от "дивелоперите", не си правеха труда да проверят какво пристига като параметри в заявката и не беше много трудно да се направи :
[линк] да показва за id 1 резултата
и някой допише
[линк]; drop mysql.user; flush privileges;
и е те тогава си таковаше онаковата, нали се сещаш :-))))))
а по основния въпрос. Това както и да го гледаш са си 2 заявки. Няма значение дали ще ги пуснеш на 1 път или на 2 пъти. Как се прави Update
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
[линк] да показва за id 1 резултата
и някой допише
[линк]; drop mysql.user; flush privileges;
и е те тогава си таковаше онаковата, нали се сещаш :-))))))
а по основния въпрос. Това както и да го гледаш са си 2 заявки. Няма значение дали ще ги пуснеш на 1 път или на 2 пъти. Как се прави Update
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: MySql update ?
Да, оказва се че Рошавия е прав. Ок. час и нещо се рових из хелповете и анализирах как phpMyAdmin изпълнява поредици от заявки. Оказва се, че го правят с цикъл и за всеки SQL израз си викат mysql_query() - това е положението.
So long and thanks for all the fish!

So long and thanks for all the fish!
Re: MySql update ?
Е да, в примера са само две заявки, но реално могат да станат доста повече.
Та мислех си, ако мога да ги пускам на порцоо по 5 - 10 работата ще става доста по-бързо.
Да, ама не, както стана ясно.
Благодаря.
И най-ярките личности си плащат тока.
Та мислех си, ако мога да ги пускам на порцоо по 5 - 10 работата ще става доста по-бързо.
Да, ама не, както стана ясно.
Благодаря.
И най-ярките личности си плащат тока.
Re: MySql update ?
Ти така или иначе имаш отворен кънекшън в рамките на скрипта, така че няма от какво да се притесняваш...
So long and thanks for all the fish!

So long and thanks for all the fish!
Re: MySql update ?
Това не ме притеснява. На моят хост, обаче е заключена load data infile и обновяване на базата мога да правя само с insert или update. Ако мога да пускам по няколко заявки наведнаж ще става по-бързо. Е това ме стиска.
Благодаря
И най-ярките личности си плащат тока.
Благодаря
И най-ярките личности си плащат тока.
Re: MySql update - Yes
След всичко казано, не разбрах какво те спъва да направиш:
$n=... // брой членове - или броя заявки
$arr_а = array( 1, 3, ..., $аrr_a[n]); // $arr_a[n] - краен n-член в масива $arr_a
$arr_b = array( 2, 9, ..., $arr_b[n]); // $arr_b[n] - краен n-член в масива $arr_b
$arr_id = array( 5, 9, ..., $arr_id[n]); // $arr_id[n] - краен n-член в масива $arr_id
for ($i = 0; $i <= ($n - 1); $i++) { // броенето в масив започва от 0 (нула)
$sql= "update mytable set a=".$arr_a[$i].", b=".$arr_b[$i]." where id=".$arr_id[$i]."\n";
mysql_query($sql);
// можеш да си добавиш "тих" режим ( @mysql_query(...) ) и обработка на грешките - errno, die() и т.н. ...
}
$n=... // брой членове - или броя заявки
$arr_а = array( 1, 3, ..., $аrr_a[n]); // $arr_a[n] - краен n-член в масива $arr_a
$arr_b = array( 2, 9, ..., $arr_b[n]); // $arr_b[n] - краен n-член в масива $arr_b
$arr_id = array( 5, 9, ..., $arr_id[n]); // $arr_id[n] - краен n-член в масива $arr_id
for ($i = 0; $i <= ($n - 1); $i++) { // броенето в масив започва от 0 (нула)
$sql= "update mytable set a=".$arr_a[$i].", b=".$arr_b[$i]." where id=".$arr_id[$i]."\n";
mysql_query($sql);
// можеш да си добавиш "тих" режим ( @mysql_query(...) ) и обработка на грешките - errno, die() и т.н. ...
}
Re: MySql update - Yes
Начинът, по който ще се съставят заявките е без значение. Моите съображения са, че скрипта ще работи по-бързо, ако се подават по няколко заявки наведнаж. Мисля, че всички са съгласни с това. И за това беше питането, защото в документацията не намерих никъде да е описано, че не може да се прави с PHP.
Благодаря
И най-ярките личности си плащат тока.
Благодаря
И най-ярките личности си плащат тока.
Re: MySql update - Yes
Сега ми хрумна нещо! Защо не провериш в документацият на MySQL как да подадеш заявка директно и не си напишеш собствена реализация на mysql_query(). Подозирам вероятност за успех над 90% ;-)
So long and thanks for all the fish!

So long and thanks for all the fish!
За MySQL и PHP
Начина по който ще се съставят заявките Е ОТ значение - повярвай ми - правилно съставени и изпълнени завки спестяват много главоболия...
Незнам кой ти е дал впечатлението да си със съображения че "едновременното" изпълнение ще ти спести време... Странно ми се струва при положение че скрипта ти се изпълнява за 0,042 сек да търсиш време от 0,038 примерно
Запитването ти беше следното:
Въпросът ми е може ли да стане това само с една заявка.
Опитах да навържа завките в едно query, разделени с ';', но ми дава синтактична грешка след първите ';'
Е, неможе - вече ти отговориха. ro6avia беше изчерпателен, hadministratora - много насочваш.
Погледни из php.net - в документацията ще намериш за mysql_query() следното: Note: The query string should not end with a semicolon.
Функцията в PHP която изпълнява mysql заявки е mysql_query(). Можеш да я изпълняваш и в цикъл - както съм ти написал и по-горе. Имаш отворен connection затова, че завките се изпълняват една след друга без прекъсване. Начина записан от теб чрез разделяне от ( ; ) пак ще изпълни заявките една след друга (но в MySQL- с този синтаксис), което дефакто е едно и също. Само спестяваш записване - нищо друго.
Времето за изпълнение на един скрипт в PHP ОТДАВНА не зависи от обема текст във файла - затова ползващите езика се разпростират надълго и нашироко
Времето зависи от самата логика на изпълнение - когато можеш с една релация да свържеш две таблици и със една заявка извикаш търсения резултат, естествено ще се изпълни по-бързо отколкото да обхождаш двете последователно...
И все пак, за да си убеден че ти се изпълнява бързо скрипта - сложи си извеждане на времето за изпълнение.

Незнам кой ти е дал впечатлението да си със съображения че "едновременното" изпълнение ще ти спести време... Странно ми се струва при положение че скрипта ти се изпълнява за 0,042 сек да търсиш време от 0,038 примерно
Запитването ти беше следното:
Въпросът ми е може ли да стане това само с една заявка.
Опитах да навържа завките в едно query, разделени с ';', но ми дава синтактична грешка след първите ';'
Е, неможе - вече ти отговориха. ro6avia беше изчерпателен, hadministratora - много насочваш.
Погледни из php.net - в документацията ще намериш за mysql_query() следното: Note: The query string should not end with a semicolon.
Функцията в PHP която изпълнява mysql заявки е mysql_query(). Можеш да я изпълняваш и в цикъл - както съм ти написал и по-горе. Имаш отворен connection затова, че завките се изпълняват една след друга без прекъсване. Начина записан от теб чрез разделяне от ( ; ) пак ще изпълни заявките една след друга (но в MySQL- с този синтаксис), което дефакто е едно и също. Само спестяваш записване - нищо друго.
Времето за изпълнение на един скрипт в PHP ОТДАВНА не зависи от обема текст във файла - затова ползващите езика се разпростират надълго и нашироко
И все пак, за да си убеден че ти се изпълнява бързо скрипта - сложи си извеждане на времето за изпълнение.
Re: За MySQL и PHP
Съгласен съм с всичко, което казваш.
Като че ли въпросът не беше зададен коректно. Реално ме интересуваше дали мога да пускам няколко заявки с едно mysql_query. Явно съм пропуснал забележката, която цитираш.
Сличаят е следният - имам хост, на който трябва да обновявам таблица от MySql. Администраторите, обаче са решили, че load data infile носи рискове, които те не искат да поемат и са я заключили. След като отговорността е тяхна, мисля, че е некоректно да споря. И ми остава въсможността за update или insert. Записите са над 1000. Мисля, че и ти си убеден, че разликата във времето за изпълнение е забрлржима с просто око. Ето за това исках да се опитам да направя нещата възможно най-бързи. Рошавият подробно и ясно обясни защо в PHP не се предоставя тази възможност. От това съм много нещастен, но има и непостижими неща. Не мисля да правя нищо повече. Всички положени усилич едва ли ще променят нещата съществено.
Благодаря за вниманието и отзивчивостта.
И най-ярките личности си плащат тока.
Като че ли въпросът не беше зададен коректно. Реално ме интересуваше дали мога да пускам няколко заявки с едно mysql_query. Явно съм пропуснал забележката, която цитираш.
Сличаят е следният - имам хост, на който трябва да обновявам таблица от MySql. Администраторите, обаче са решили, че load data infile носи рискове, които те не искат да поемат и са я заключили. След като отговорността е тяхна, мисля, че е некоректно да споря. И ми остава въсможността за update или insert. Записите са над 1000. Мисля, че и ти си убеден, че разликата във времето за изпълнение е забрлржима с просто око. Ето за това исках да се опитам да направя нещата възможно най-бързи. Рошавият подробно и ясно обясни защо в PHP не се предоставя тази възможност. От това съм много нещастен, но има и непостижими неща. Не мисля да правя нищо повече. Всички положени усилич едва ли ще променят нещата съществено.
Благодаря за вниманието и отзивчивостта.
И най-ярките личности си плащат тока.
Re: За MySQL и PHP
Срам ме е да попитам, но как се извежда времето за изпълнение на един скрипт? От доста време се чудя... Търсих и в хелпа и сайта на ПХП, но не успях да го намеря.
So long and thanks for all the fish!

So long and thanks for all the fish!
Re: За MySQL и PHP
В началото на скрипра дефинираш променлива и я пълниш с microtime().
В края отново вземаш стойност от microtime() и исчисляваш разликата.
И най-ярките личности си плащат тока.
В края отново вземаш стойност от microtime() и исчисляваш разликата.
И най-ярките личности си плащат тока.
Re: За MySQL и PHP
10x 20x 30x
А аз си мсилех че има специална функция за това! Как може да не сетя за НАЙ-ПРОСТОТО и ЛОГИЧНО нещо.
Да знаете някой да провежда опреснителни курсове по прсто и логично мислене? Май вече имам нужда от такъв...
So long and thanks for all the fish!

А аз си мсилех че има специална функция за това! Как може да не сетя за НАЙ-ПРОСТОТО и ЛОГИЧНО нещо.
Да знаете някой да провежда опреснителни курсове по прсто и логично мислене? Май вече имам нужда от такъв...
So long and thanks for all the fish!
Re: За MySQL и PHP
за да ти е още по-лесно
ползва се така :
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
function microtime_diff($a, $b) {
list($a_dec, $a_sec) = explode(" ", $a);
list($b_dec, $b_sec) = explode(" ", $b);
return $b_sec - $a_sec + $b_dec - $a_dec;
}
ползва се така :
$time_start = microtime();
..........
$elapsed = microtime_diff($time_start,microtime());
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy