Mam skrypt PHP, który uruchamia zapytanie SELECT, a następnie natychmiast usuwa rekord. Istnieje wiele maszyn, które wysyłają ping do tego samego pliku php i pobierają dane z tej samej tabeli. Każda zdalna maszyna działa w zadaniu cron.SELECT następnie natychmiast USUŃ rekord mysql
Mój problem polega na tym, że czasami nie można usunąć wystarczająco szybko, ponieważ niektóre maszyny pingują dokładnie w tym samym czasie.
Moje pytanie brzmi: jak mogę wybrać rekord z bazy danych i usunąć go, zanim następny komputer go pobierze. Na razie dodałem tylko krótkie opóźnienie, ale nie działa zbyt dobrze. Próbowałem użyć transakcji, ale nie sądzę, że ma ona zastosowanie tutaj.
Oto przykładowy fragment mojego skryptu:
<?php
$query = "SELECT * FROM `queue` LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$email = $row['email'];
$campaign_id = $row['campaign'];
}
$queryx = "DELETE FROM `queue` WHERE `email` = '".$email."'";
$resultx = mysql_query($queryx) or die(mysql_error());
?>
naprawdę docenić pomoc.
jak to nie dotyczy? to brzmi * dokładnie * tak, jak to, do czego jest dobra transakcja. – mpen
Czy dozwolone jest korzystanie z procedur przechowywanych? – dvicino
@Mark - Czy transakcje również uniemożliwiają działanie SELECT? Zastanawiam się, czy to nie może być [email protected] - Jeśli są one uruchamiane przez 'cron', jaki jest sens' umrzeć (mysql_error()) '? Dlaczego nie zarejestrować błędu w pliku lub czymś? –