ColdFusion Параллельно с выполнением запросов (данные не обновляются) - PullRequest
0 голосов
/ 12 ноября 2010

Я делаю обновление, а затем пытаюсь вернуть обновленное значение поля, которое было обновлено.Проблема, однако, в том, что я не получаю обновленное значение, а предыдущее значение.Я знаю, что обновление работает правильно, потому что, если я запрашиваю, он показывает возвращенные данные.Я пробовал cftransaction изоляция = "serializable", но он не работает.

Мой код приведен ниже, есть ли способ обойти это или мне придется сделать 2 AJAX-запроса на проблему simpe?*

Это сводит меня с ума, потому что этот язык постоянно делает задачи, которые должны быть просто утомительными.

Ответы [ 4 ]

2 голосов
/ 13 ноября 2010

У вас нет проблемы с CF, у вас есть проблема с SQL, и я думаю, что это подзапросы. Во-первых, почему подзапрос, а не объединение?

Можете ли вы подтвердить, что они являются отношениями 1: 1 в подзапросах, потому что, если они один ко многим, вы просто получите первое совпадение.

Я не знаю схему вашей базы данных, но, действуя так, как вы в настоящее время, я думаю, что SELECT должен иметь соответствие таблицы на основе поля формы, которое вы только что обновили

<cfquery name="phase" datasource="#application.datasource#">
SELECT status,
(
    SELECT ROUND(sum(time_to_sec(duration))/3600,2)
    FROM gt_timesheet
    WHERE gt_timesheet.phaseid=<cfqueryparam value="#form.phase#" cfsqltype="CF_SQL_INTEGER">
) as billedbillablehours,
(
    SELECT ROUND(sum(time_to_sec(hours))/3600,2)
    FROM gt_services
    WHERE gt_services.phaseid=<cfqueryparam value="#form.phase#" cfsqltype="CF_SQL_INTEGER">
) as billablehours
FROM gt_phases
WHERE phaseid=<cfqueryparam value="#form.phase#" cfsqltype="CF_SQL_INTEGER">
</cfquery>

Надеюсь, что вы куда-то попадете, если нет, я думаю, вам нужно более подробно объяснить схему базы данных.

1 голос
/ 12 ноября 2010

Как обновляется длительность после выполнения первого оператора Update?Это вызывает триггер?Возможно, это вызывает обновление поля «длительность» после второго запроса.Вы можете попробовать добавить 1-секундный сон после первого запроса, чтобы убедиться, что второй запрос получает правильное значение.

1 голос
/ 12 ноября 2010

Полагаю, вы что-то упустили в операторе обновления. Почему бы вам не пересмотреть запрос еще раз.

1 голос
/ 12 ноября 2010

ColdFusion не выполняет ничего в том же запросе в Parallel, если вы не используете <cfthread>

...