Можно сделать обман при помощи должностного лица () для вызова чего-то, что может сделать Запросы HTTP, как wget
, но необходимо направить весь вывод от программы до где-нибудь, как файл или/dev/null, иначе процесс PHP будет ожидать того вывода.
, Если Вы хотите разделить процесс от апачского потока полностью, попробуйте что-то как (я не уверен в этом, но я надеюсь, что Вы получаете идею):
exec('bash -c "wget -O (url goes here) > /dev/null 2>&1 &"');
Это не хороший бизнес, и Вы, вероятно, захотите что-то как задание крона, вызывающее сценарий heartbeat, который опрашивает фактическую очередь событий базы данных, чтобы сделать реальные асинхронные события.
what happens if the subquery returns no rows? Will it do an update with nulls?
Yes-- you can test this like:
update YourTable
set col1 = (select 1 where 1=0)
This will fill col1 with NULLs. In case the subquery returns multiple rows, like:
update YourTable
set col1 = (select 1 union select 2)
The database will generate an error.
Secondly, is there a better way to write this. I am basically updating three fields in tableA from tableB, but the update should only happen if any of the three fields are different.
Intuitively I wouldn't worry about the performance. If you really wish to avoid the update, you can write it like:
UPDATE a
SET x = b.x, y = b.y, z = b.z
FROM tableA a, tableB b
WHERE a.id = b.id AND (a.x <> b.x OR a.y <> b.y OR a.z <> b.z)
The WHERE
clause prevents updates with NULL.
В informix, который я использовал, вариант решения Andomar:
UPDATE a
SET x,y,z = ( (SELECT x, y, z
FROM tableB b
WHERE tableA.id = b.id) )
WHERE tableA.id IN (SELECT fromTable.id
FROM tableA toTable, tableB fromTable
WHERE toTable.id = fromTable.id
AND ((toTable.x <> fromTable.x)
OR (toTable.y <> fromTable.y)
OR (toTable.z <> fromTable.z))