kakisaebalsujit
@kakisaebalsujit
programist

Как выполнит одним запросом несколько действий MYSQL?

Доброго времени суток, я в коде выполняю работу с базой данных.
И у меня там выполняется сразу 4 запроса.
Как мне все это сделать в одном запросе, для снижения нагрузки на базу данных.
Сами запрос:
$db->query("DELETE FROM timer WHERE vk_id = $ids");
$db->query("INSERT INTO timer (vk_id, tim) VALUES ('$ids', '$time_now2')");
$db->query("UPDATE score SET score = score + $klik push = push + 1 WHERE vk_id = $ids LIMIT 1");
$db->query("UPDATE score SET score = score + $klik push = push + 1 WHERE vk_id = $ids LIMIT 1");


Заранее спасибо ;)
  • Вопрос задан
  • 277 просмотров
Решения вопроса 1
@FanatPHP
Вот ты и подрос, наконец, чтобы узнать главное правило программирования:

Преждевременная оптимизация - корень всех зол.

Никакой нагрузки тут нет, снижать нечего. Поэтому расслабьтся, забудь эти фантазии и займись чем-нибудь полезным.

Например, открой для себя подготовленные выражения и не никогда не пихай переменные прямо в запрос. В противном случае будет очень, очень больно когда сайт будет выложен в открытый доступ.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Как выполнит одним запросом несколько действий MYSQL?
Никак, это разные запросы с разными таблицами и разными задачами.

для снижения нагрузки на базу данных.
Неужели у вас уже более 1000 запросов в секунду и необходима срочная оптимизация?

$db->query("UPDATE score SET score = score + $klik push = push + 1 WHERE vk_id = $ids LIMIT 1");
$db->query("UPDATE score SET score = score + $klik push = push + 1 WHERE vk_id = $ids LIMIT 1");
во первых - не хватает запятых между присваиваниями, во вторых SET score = score + $klik*2, push = push + 2 вот вам минус 1 запрос. В третьих - вроде используете pdo, а переменные вставляете без prepared statements...

Все это можно:
1) обернуть в транзакцию - профит от этого - целостность выполнения операций(на скорости особо не отразится).
2) Запустить одним скриптом, разделив запросы семиколоном ";" (профита практически никакого)
Ответ написан
Stalker_RED
@Stalker_RED
Можно вместо
$db->query("UPDATE score SET score = score + $klik push = push + 1 WHERE vk_id = $ids LIMIT 1");
$db->query("UPDATE score SET score = score + $klik push = push + 1 WHERE vk_id = $ids LIMIT 1");

обновить score за один раз
$db->query("UPDATE score SET score = score + $klik + $klik, push = push + 2 WHERE vk_id = $ids LIMIT 1");


Можно вместо DELETE FROM timer и INSERT INTO timer сделать один раз update (если у вас таблице timer нет повторяющихся записей с одинаковым vk_id).

А объединять запросы к timer и score смысла нет, скорее всего.
Ответ написан
php666
@php666
PHP-макака
поставить индекс на timer на vk_id
поставить индекс на score на vk_id
больше ничего не трогать
никакой нагрузки тут нет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы