Перейти к содержимому


зависает при update_query


Сообщений в теме: 4

#1 OLDest

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

  • Пользователи
  • PipPipPip
  • 268 сообщений
  • Пол:Мужчина
  • Город:Калининград

Отправлено 10 Июнь 2013 - 18:17

update_query($upd_z, "Имя таблицы", "id in (select f1954 from cb_data124 where f1717=".$line['ID'].") and status=0");

мускуль висит. всего 18000 в обновляемой таблице , а в таблице 124 31 запись. под выборку подходит всего 2 записи. $upd_z содержит одно значение.

Сообщение отредактировал OLDest: 11 Июнь 2013 - 03:45

Купил лицензию КБ

#2 OLDest

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

  • Пользователи
  • PipPipPip
  • 268 сообщений
  • Пол:Мужчина
  • Город:Калининград

Отправлено 11 Июнь 2013 - 03:45

	$z_q="select f1954 from cb_data124 where f1717=".$line['ID'];
	$z_q_r=mysql_query($z_q);
	while ($z_res=mysql_fetch_array($z_q_r)){
	update_query($upd_z, "Заявления ДОУ", "id =".$z_res['f1954']." and status=0");
	};
такая конструкция зависаний не вызывает

Сообщение отредактировал OLDest: 11 Июнь 2013 - 03:46

Купил лицензию КБ

#3 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 11 Июнь 2013 - 09:28

Сложные запросы в КБ лучше не использовать, в том числе по этой причине.

#4 Гость_Roman_*

  • Гости

Отправлено 11 Июнь 2013 - 09:30

Дело в том, что оператор IN SELECT выполняется очень медленно, по сравнению просто с работой запросов по двум таблицам, либо же, как в Вашем случае, два запроса. При чём этот вариант наиболее оптимальный, хотя количество запросов увеличивается, суммарно они могут сработать быстрее.

#5 OLDest

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

  • Пользователи
  • PipPipPip
  • 268 сообщений
  • Пол:Мужчина
  • Город:Калининград

Отправлено 13 Июнь 2013 - 07:45

Просмотр сообщенияCbCoder (11 Июнь 2013 - 09:28) писал:

Сложные запросы в КБ лучше не использовать, в том числе по этой причине.
как такой запорос сделать вашими ф-ями
mysql_query("
UPDATE
   cb_data114
SET
   `f1723` =
(
select @num
from (SELECT @num:=0, @vg:='', @dou:='') s
where
	 (@num := if(`f1652` = @vg and `f1548` = @dou, @num + 1, 1)) is not null
  and(@vg := `f1652`) is not null
  and(@dou := `f1548`) is not null
)
WHERE `status` = 0
ORDER BY `f1548`,`f1652`,`f1634`, IF (`f1353` = '0000-00-00 00:00:00' and `f1348` = '', 1, -1), `f1353`, IF (`f1348` = '', 1, -1), CAST(`f1348` as UNSIGNED), id
")

Купил лицензию КБ





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных