MySQL множественный update

Digo

Проверенные
Сообщения
54
Реакции
42
Баллы
315
Подскажите как лучше сделать, чтоб не нагружать сильно сервер. Смысл такой есть форма

usernametrophy_points
user1 15
user225
При ее отправке нужно изменить trophy_points у выбранного пользователя. Единственный запрос по update на ксене, который я нашел выглядит так
PHP:
\XF::db()->update('xf_user',[
                'trophy_points' => $value
                ],
            'user_id = ?',$id);
И мне кажется прогонять его массивом не самый лучший вариант.
 
PHP:
$users = [1, 2, ...];
$trophy_points = 25;

$db = \XF::db();

$users = $db->quote(array_values($users));
$params = [$trophy_points];

$db->query("
    UPDATE
        `xf_user`
    SET
        `trophy_points` = ?
    WHERE
        `user_id` IN({$users})", $params);

Но такой вариант подойдёт только если надо всем выставить одинаковое кол-во очков.
Иначе и никак.
 
CrazyHackGUT, Я так полагаю по данному примеру, чтоб $trophy_points было массивом нужно использовать CASE в запросе, что-то подобное этому?

SQL:
UPDATE xf_user SET trophy_points = CASE
WHEN user_id = 1 THEN 15;
WHEN user_id = 2 THEN 25;
…
END
WHERE user_id IN (1,2,…)
 
что-то подобное этому?
Почему бы не
PHP:
SELECT * FROM pages WHERE id IN(".implode(',',$user_bonus)."
где $user_bonus_id обычный массив.
Как-то так, не программер аж ни разу.
 
CrazyHackGUT,
PHP:
$value = 15;
\XF::db()->update('xf_user', ['trophy_points' => $value], '0');

PHP:
<?php

namespace XF\Db;

abstract class AbstractAdapter
{ ...

public function update($table, array $cols, $where, $params = [], $modifier = '', $order = '', $limit = 0) ...

UPD.
Мне кажется. Там всё равно надо будет использовать цикл.
 

Вложения

  • Screenshot.png
    Screenshot.png
    38 KB · Просмотры: 10
  • Screenshot (1).png
    Screenshot (1).png
    22.6 KB · Просмотры: 10
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу