Элементы в таблице не имеют определенного порядка, поэтому один только порядок нельзя использовать для различения разных слотов.
Однако, это может и не иметь значения, поскольку вы хотите найти первый пустой слот.Без упорядочения по слотам это равносильно поиску любого пустого слота.
Это делается так:
update slots s
set slotValue=newValue
WHERE s.userID = <UserID> AND slotValue IS NULL AND NOT EXISTS
(SELECT 1 FROM slots s2 WHERE s2.userid=s.userid AND s2.slotValue IS NULL AND s2.slotID<s.slotID)
Если вы добавляете поля slotNr
в таблицу слотов (нумерацияслоты пользователя из 1..10) тогда запрос будет выглядеть так:
update slots s
set slotValue=newValue
WHERE s.userID = <UserID> AND slotValue IS NULL AND NOT EXISTS
(SELECT 1 FROM slots s2 WHERE s2.userid=s.userid AND s2.slotValue IS NULL AND s2.slotNr<s.slotNr)
Когда вы выполняете запрос, база данных возвращает количество затронутых строк.Если все слоты используются, возвращаемое значение будет 0, иначе 1, если слот был обновлен.
Вы можете узнать, сколько свободных слотов есть, написав
select count(*) FROM slots
WHERE slots.userID=<userID> AND slots.slotValue IS NULL
Хотя даже если это возвращает свободные слоты, нет никакой гарантии, что, когда вы действительно захотите изменить значение пустого слота, будут ли свободные слоты - другие операции, добавляющие значения слотов для этого пользователя, могут занять последний доступный слот.Поэтому лучше использовать переменную ROW_COUNT, чтобы определить, был ли изменен слот или нет.