powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT + UPDATE в одной связке.
22 сообщений из 22, страница 1 из 1
SELECT + UPDATE в одной связке.
    #38948683
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Php скрипт двумя запросами делает для пользователей выборку (SELECT) с таблицы и пометку (UPDATE) для записи что пользователь "забрал" эту запись. Такая схема работает до тех пор пока не подключиться еще одни пользователь и связка
SELECT
UPDATE
может поменяться на
SELECT User1
SELECT User2
UPDATE User1
UPDATE User2
т.е. есть вероятность что оба пользователя получат одну и туже запись, чего делать нельзя.
Подскажите как разрешить эту проблему.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948701
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты:
1) SELECT ... FOR UPDATE
2) поменять местами порядок выполнения SELECT и UPDATE.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948716
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поменять местами не получится, но первый вариант подходит.
Спасибо тебе Добрый человек.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948719
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя ВаняПоменять местами не получитсяЭто почему же?
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948780
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В update мы помечаем записи, которые "забрал" пользователь, но в таблице есть и другие "помеченные" записи. Получается что в select мы выберем больше, чем нам нужно.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948785
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если "новая" пометка всегда помечает не более, чем по одной записи, то можно узнать ID свежепомеченной записи с помощью функции LAST_INSERT_ID с параметром.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948801
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не вернемся ли мы к той же проблеме (что и SELECT + UPDATE), если UPDATE и вызов mysql_insert_id из PHP в разных обращениях к mysql? Ведь между ними другой пользователь может переназначить LAST_INSERT_ID(...) своим UPDATE.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948808
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Ваня,

Нет, не вернемся. LAST_INSERT_ID сессионный.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948816
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал:
update table set id = LAST_INSERT_ID(id) where id = 1
что-то mysqli_insert_id вернул пустоту.
Что я делаю не так?
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948829
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так работает:
update table set id = LAST_INSERT_ID(id) where id = 1
select LAST_INSERT_ID()
так и буду использовать.
Спасибо за поддержку.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948830
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя ВаняПопробовал:
Код: sql
1.
update table set id = LAST_INSERT_ID(id) where id = 1


что-то mysqli_insert_id вернул пустоту.
А чего ты ждал? какую логику пытался реализовать?
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948831
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя ВаняПопробовал:
update table set id = LAST_INSERT_ID(id) where id = 1
что-то mysqli_insert_id вернул пустоту.
Что я делаю не так?А существует запись с id = 1 ?
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948836
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaА чего ты ждал? какую логику пытался реализовать?
в теме все описал выше.

miksoftА существует запись с id = 1 ?
Да, конечно.
не только у меня такая проблема оказывается:
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948840
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Ваня,

Сделайте в записи реальное изменение.
MySQL может игнорировать апдейт, который реально ничего не меняет.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948841
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, ссылка на вставилась
Ссылка
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948849
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Ваняв теме все описал выше
Не вижу связи между этим запросом и тем, что написано выше.
Более того - если ID является автоинкрементным первичным ключом, твой запрос должен бать ошибку дублирования значения первичного ключа.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948856
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaБолее того - если ID является автоинкрементным первичным ключом, твой запрос должен бать ошибку дублирования значения первичного ключа.
Я Вас удивлю, но это не так.

miksoftСделайте в записи реальное изменение.
MySQL может игнорировать апдейт, который реально ничего не меняет.
Все равно пустой.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948861
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaБолее того - если ID является автоинкрементным первичным ключом, твой запрос должен бать ошибку дублирования значения первичного ключа.Почему?
Он же фактически не изменяется.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948862
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Ваняне только у меня такая проблема оказывается:А SELECT LAST_INSERT_ID() работает?
Если да, то это какая-то PHP-шная магия, тут не подскажу.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948867
Дядя Ваня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftДядя Ваняне только у меня такая проблема оказывается:А SELECT LAST_INSERT_ID() работает?
Если да, то это какая-то PHP-шная магия, тут не подскажу.
Да работает без проблем. Спасибо.
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948877
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Ваняmiksoftпропущено...
А SELECT LAST_INSERT_ID() работает?
Если да, то это какая-то PHP-шная магия, тут не подскажу.
Да работает без проблем. Спасибо.По вашей же ссылке про этот вариант написано. А я думал, что уже попробовали...
...
Рейтинг: 0 / 0
SELECT + UPDATE в одной связке.
    #38948888
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, прозявал, что функция вызывается с параметром.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT + UPDATE в одной связке.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]