|
|
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Php скрипт двумя запросами делает для пользователей выборку (SELECT) с таблицы и пометку (UPDATE) для записи что пользователь "забрал" эту запись. Такая схема работает до тех пор пока не подключиться еще одни пользователь и связка SELECT UPDATE может поменяться на SELECT User1 SELECT User2 UPDATE User1 UPDATE User2 т.е. есть вероятность что оба пользователя получат одну и туже запись, чего делать нельзя. Подскажите как разрешить эту проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 14:55:27 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Варианты: 1) SELECT ... FOR UPDATE 2) поменять местами порядок выполнения SELECT и UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 15:05:11 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Поменять местами не получится, но первый вариант подходит. Спасибо тебе Добрый человек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 15:15:52 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя ВаняПоменять местами не получитсяЭто почему же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 15:17:46 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
В update мы помечаем записи, которые "забрал" пользователь, но в таблице есть и другие "помеченные" записи. Получается что в select мы выберем больше, чем нам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:06:23 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Если "новая" пометка всегда помечает не более, чем по одной записи, то можно узнать ID свежепомеченной записи с помощью функции LAST_INSERT_ID с параметром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:09:35 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
А не вернемся ли мы к той же проблеме (что и SELECT + UPDATE), если UPDATE и вызов mysql_insert_id из PHP в разных обращениях к mysql? Ведь между ними другой пользователь может переназначить LAST_INSERT_ID(...) своим UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:21:09 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя Ваня, Нет, не вернемся. LAST_INSERT_ID сессионный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:24:21 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Попробовал: update table set id = LAST_INSERT_ID(id) where id = 1 что-то mysqli_insert_id вернул пустоту. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:31:24 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Вот так работает: update table set id = LAST_INSERT_ID(id) where id = 1 select LAST_INSERT_ID() так и буду использовать. Спасибо за поддержку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:41:19 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя ВаняПопробовал: Код: sql 1. что-то mysqli_insert_id вернул пустоту. А чего ты ждал? какую логику пытался реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:41:35 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя ВаняПопробовал: update table set id = LAST_INSERT_ID(id) where id = 1 что-то mysqli_insert_id вернул пустоту. Что я делаю не так?А существует запись с id = 1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:42:00 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
AkinaА чего ты ждал? какую логику пытался реализовать? в теме все описал выше. miksoftА существует запись с id = 1 ? Да, конечно. не только у меня такая проблема оказывается: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:46:28 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя Ваня, Сделайте в записи реальное изменение. MySQL может игнорировать апдейт, который реально ничего не меняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:48:05 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Пардон, ссылка на вставилась Ссылка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:48:16 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя Ваняв теме все описал выше Не вижу связи между этим запросом и тем, что написано выше. Более того - если ID является автоинкрементным первичным ключом, твой запрос должен бать ошибку дублирования значения первичного ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:51:54 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
AkinaБолее того - если ID является автоинкрементным первичным ключом, твой запрос должен бать ошибку дублирования значения первичного ключа. Я Вас удивлю, но это не так. miksoftСделайте в записи реальное изменение. MySQL может игнорировать апдейт, который реально ничего не меняет. Все равно пустой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:55:10 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
AkinaБолее того - если ID является автоинкрементным первичным ключом, твой запрос должен бать ошибку дублирования значения первичного ключа.Почему? Он же фактически не изменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:59:17 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя Ваняне только у меня такая проблема оказывается:А SELECT LAST_INSERT_ID() работает? Если да, то это какая-то PHP-шная магия, тут не подскажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 16:59:57 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
miksoftДядя Ваняне только у меня такая проблема оказывается:А SELECT LAST_INSERT_ID() работает? Если да, то это какая-то PHP-шная магия, тут не подскажу. Да работает без проблем. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:02:01 |
|
||
|
SELECT + UPDATE в одной связке.
|
|||
|---|---|---|---|
|
#18+
Дядя Ваняmiksoftпропущено... А SELECT LAST_INSERT_ID() работает? Если да, то это какая-то PHP-шная магия, тут не подскажу. Да работает без проблем. Спасибо.По вашей же ссылке про этот вариант написано. А я думал, что уже попробовали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 17:05:41 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38948808&tid=1833256]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 369ms |

| 0 / 0 |
