I am sending sms to mobile numbers using many apis at the same time, now I want to ensure that only one sms should be sent to one mobile number.
I am selecting a row using the following query
x
SELECT s_contact_name, s_contact_number, i_sms_sent_count
FROM contacts
WHERE i_sms_sent_count = 0
ORDER BY ts_time_collected DESC
LIMIT 1;
while selecting the row I want to set field i_sms_sent_count to 1 so that this row could not be selected again by any user.
Advertisement
Answer
One method is to do the update
and then get the values. Assuming you have a contact_id
column:
update contacts
set i_sms_sent_count = 1,
contact_id = (@contact_id := contact_id) -- does nothing except set the variable
where i_sms_sent_count = 0
order by ts_time_collected desc
limit 1;
Then get the information:
select *
from contacts c
where contact_id = @contact_id;
EDIT:
An alternative is:
start transaction;
select contact_id into @contact_id
from contacts
where i_sms_sent_count = 0
order by ts_time_collected desc
limit 1
for update;
update contacts
set i_sms_sent_count = 0
where contact_id = @contact_id;
commit transaction;