Mysql MySql INNER JOIN

bobo

Новичок
Добрый вечер, объясните дураку, почему один и тот же запрос прекрасно работает локально и не работает на хостинге

PHP:
UPDATE `".DB_PREFIX."poller`
						INNER JOIN `".DB_PREFIX."poller` AS `".DB_PREFIX."poller1` ON ".DB_PREFIX."poller1.status = '1'
						SET ".DB_PREFIX."poller1.status = '0',
							".DB_PREFIX."poller.status = '1'
						WHERE ".DB_PREFIX."poller.id = ".slash($POST['id'])."
".DB_PREFIX."poller1.status = '0' выполняется
".DB_PREFIX."poller.status = '1' уже нет :(

Заранее благодарю!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
я вообще суть этого inner join не понимаю, может обьяснишь?
 

bobo

Новичок
Вычитал в интернетах, что так можно объединить 2 update запроса в один :)
 

bobo

Новичок
Задача простая: в таблице у всех записей сначала нужно обновить значение поля `status` на '0', затем одной записи (по пришедшему `id`) выставить значение '1'
Ну и другой случай, похожий, только 2 разные таблицы участвуют: в одной (опять же по пришедшему `id`) обновляем `status` на '1', а во второй выбираем все записи с полями, которые ссылаются на этот `id` первой таблицы и так же ставим в `status` единицу.

Надеюсь понятно объяснил :)

классическая инъекция, кстати :)
Хм, так вроде входящая переменная обработана)) Или я как-то неправильно представляю себе, что есть защита от инъекций..
 

Фанат

oncle terrible
Команда форума
а откуда такая прям нужда сделать обязательно одним запросом-то?

Видимо, неправильно представляешь.
 

Фанат

oncle terrible
Команда форума
Действительно. Зачем есть отдельно первое и второе? А ещё и компот отдельно. Лучше всё слить в одну миску и похлебать по-быстрому. Посуды - опять же - потребуется куда меньше, ни вилок тебе, ни чашек.
Тебе не приходило в голову, что бывают действия, которые лучше выполнять раздельно? А два запроса может быть лучше, чем один? К примеру, не заставлять бд делать лишнюю выборку данных?

А инъекцию всё-таки поправь.
 

bobo

Новичок
Про инъекции уже читаю твою (видимо) статью на хабре.

В остальном убедил.
 

chira

Новичок
во второй выбираем все записи с полями, которые ссылаются на этот `id` первой таблицы и так же ставим в `status` единицу.
ты в запросе связываешь вторую таблицу по значению статуса а не 'id'?
в update учавствует одна таблица и ты пытаешся физически изменить одно и тоже значение, в результате у тебя по любому сработает только одно из присвоений, какое, ты уже знаешь
а что если у записи с данным ид статус будет "1"?
 
Сверху