LINUX.ORG.RU

Опять MySQL

 , ,


0

1

Есть табличка с полями: uid, pid, x, y, z
Пара uid+pid уникальный составной, но от этого не легче.
Дело в том, что сюда нужен «честный» апдейт на x, y, z для существующих uid+pid, и я не могу влепить сюда REPLACE INTO иначе вставятся новые записи, которых быть не должно.

Как избавиться от апдейтов в цикле?

а) IF/CASE/WHEN и собрать запрос в приложении?
б) ON DUPLICATE KEY UPDATE и как оно отработает на составном? Чот мне боязно, пойду проверю ))
в) другие варианты..

ON DUPLICATE KEY UPDATE и как оно отработает на составном? Чот мне боязно, пойду проверю ))

Нормально оно работает на составном

IF/CASE/WHEN и собрать запрос в приложении?

Если в максимальную длину не упрёшься

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

работает на составном

А вот хрен, оно мне не подойдёт, т.к. в первый раз, если такой записи нет, он делает инсерт ))

в максимальную длину упрёшься

Ну там может и сотня ровсов на апдейт быть, да..

Еще варианты?

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от goingUp

Разве?

Ато! Так же как и каментом выше я указал — нет записи, будет инсерт. А именно инсерта и нужно избежать.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

Ага. Много запросов? Написал бы сколько. ON DUPLICATE KEY UPDATE тоже по одному запросу на запись, а IF/CASE/WHEN вообще звучат загадочно :)

goingUp ★★★★★
()
Ответ на: комментарий от ya-betmen

И тут мы приезжаем к зависимости от конкретной БД. Да ну нафик, щас психану, захреначу в цикле, а в каментах оставлю ссыль на этот тред ))

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от goingUp

IF/CASE/WHEN вообще звучат загадочно

e.g.:

IF(uid = A AND pid = B, x = C, IF(..., x = x)...)

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от redixin

Не понял при чем тут препара и цикл? Она избавит от цикла? Нет. Отправить несколько апдейтов ";"? Упремся в максимальную длину.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

а чем «ON DUPLICATE KEY UPDATE» уменьшают количество запросов?

Хочется уменьшить количество запросов - нареж на пачки: делай по N ';'-разделенных команд за 1 запрос.

Но вот только если это будет человек делать руками в админке, то ИМХО можно и эти 200 запросов послать.

Вот ели это была бы массовая заливка через API, тогда да, а иначе - преждевременная оптимизация.

anonymous
()
Ответ на: комментарий от deep-purple

200 запросов это мало. Некоторые веб сайты отправляют столько при загрузке главной сайта :). Конечно апдейты медленнее селектов, но все же.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.