[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Update NULL
null_upd
Привет, существует скрипт, он проверяет некоторые значения в одной таблице и изменяет в другой, подскажите можно ли как то по другому его написать чтоб он сразу же изменял значение `a` в tables2 на NULL если значение `a` в tables == NULL

$sl=mysql_query("SELECT `id`, `a` FROM `tables`");
while($sl2=mysql_fetch_array($sl)){
$a=$sl2['a'];
if(is_null($a)){
$a=" NULL";
}
mysql_query("UPDATE `tables2` SET `a`= $a WHERE `id`='{$sl2['id']}'");
}

Можно ли обойтись без вот этой проверки?

if(is_null($a)){
$a="NULL";
}
depp
а есть ли смысл в такой постановке задачи?
null_upd
Цитата (depp @ 8.12.2016 - 23:12)
а есть ли смысл в такой постановке задачи?

Есть раз спрашиваю
AllesKlar
UPDATE table2 SET a = null WHERE id in (SELECT id FROM table1 WHERE a is null)


_____________
[продано копирайтерам]
Ron
Цитата (null_upd @ 9.12.2016 - 03:15)
Есть раз спрашиваю

Советую описывать целиком ситуацию, а не задавать конкретные вопросы. С таким мизерным опытом можно сотворить очень убогое решение, которое весьма трудно будет поддерживать в дальнейшем. Вопрос от depp очевидно носил именно такой смысл.

Условие не самое страшное от чего нужно срочно избавляться. Главное запрос в цикле, за что в приличных конторах коллеги перестают советоваться, лид ставит раком, а если есть архитекторы/администраторы БД (DBA), то и они прибегут приснут с большим азартом. biggrin.gif

P.s. Я бы UPDATE через JOIN сделал.

null_upd
Цитата (Ron @ 9.12.2016 - 09:38)
Цитата (null_upd @ 9.12.2016 - 03:15)
Есть раз спрашиваю

Советую описывать целиком ситуацию, а не задавать конкретные вопросы. С таким мизерным опытом можно сотворить очень убогое решение, которое весьма трудно будет поддерживать в дальнейшем. Вопрос от depp очевидно носил именно такой смысл.

Условие не самое страшное от чего нужно срочно избавляться. Главное запрос в цикле, за что в приличных конторах коллеги перестают советоваться, лид ставит раком, а если есть архитекторы/администраторы БД (DBA), то и они прибегут приснут с большим азартом. :D

P.s. Я бы UPDATE через JOIN сделал.

Цикл я просто написал здесь, на самом деле его нет.
Описываю ситуацию, скрипт нужен для браузерной игры - для чего конкретно не будем вникать - возьмем к примеру "дом" - обычный дом который находится в таблице tables1, в значение `a` хранится его апгрейд (это стены, покраска и так далее) - не важно, когда дом выставляется на продажу мне нужно переписать его в `tables2` - так есть в магазин с апгрейдами.
Мне просто нужно переписать NULL либо текст который будет написан в `a` - все что нужно сделать, в значение `a` нельзя впихнуть нечего из того что приведет к инъекции/уязвимости в других скриптах до выставления на продажу. Можно ли как то сделать INSERT либо UPDATE без вот этой проверки?

if(is_null($a)){
$a="NULL";
}
Valick
null_upd, рано вам заниматься играми. Вам уже дали решение на уровне СУРБД, будет это IN или JOIN не суть важно, главное не тащить в РНР всё что "плохо лежит".

_____________
Стимулятор ~yoomoney - 41001303250491
null_upd
Цитата (Valick @ 9.12.2016 - 15:09)
null_upd, рано вам заниматься играми. Вам уже дали решение на уровне СУРБД, будет это IN или JOIN не суть важно, главное не тащить в РНР всё что "плохо лежит".

Твою ж девизию, спросил маленький вопрос - попросил чтоб кто то привел пример. Я делаю то insert то update - мне нужно просто знать:
Как можно вписать в запрос UPDATE или INSERT сразу значение `a` БЕЗ ПРОВЕРОК так чтоб она переписалось в точности как есть - Если NULL значит запись NULL, а не пустого значения.
AllesKlar
Цитата (null_upd @ 9.12.2016 - 13:32)
Как можно вписать в запрос UPDATE или INSERT сразу значение `a` БЕЗ ПРОВЕРОК так чтоб она переписалось в точности как есть - Если NULL значит запись NULL, а не пустого значения

Valick прав. тебе еще рано, раз такой вопрос вообще был задан, т.к. вопрос на знание основных возможностей mysql

По существу:
Просто одним запросом - никак нельзя сделать.
Но можно написать в базе простенькую процедуру на пару строк с циклом, и уже ее вызывать одним запросом из php

Либо сделать небольшой костыль с триггером.
Добавляем одно фиктивное поле таблице table1, и просто для всей таблицы его обновляем.
UPDATE table1.fake_field = ! table1.fake_field;


Тригер на таблицу table1 типа
UPDATE table2 SET a = NEW.a WHERE id = NEW.id


_____________
[продано копирайтерам]
null_upd
Цитата (AllesKlar @ 10.12.2016 - 03:20)
Цитата (null_upd @ 9.12.2016 - 13:32)
Как можно вписать в запрос UPDATE или INSERT сразу значение `a` БЕЗ ПРОВЕРОК так чтоб она переписалось в точности как есть - Если NULL значит запись NULL, а не пустого значения

Valick прав. тебе еще рано, раз такой вопрос вообще был задан, т.к. вопрос на знание основных возможностей mysql

По существу:
Просто одним запросом - никак нельзя сделать.
Но можно написать в базе простенькую процедуру на пару строк с циклом, и уже ее вызывать одним запросом из php

Либо сделать небольшой костыль с триггером.
Добавляем одно фиктивное поле таблице table1, и просто для всей таблицы его обновляем.
UPDATE table1.fake_field = ! table1.fake_field;


Тригер на таблицу table1 типа
UPDATE table2 SET a = NEW.a WHERE id = NEW.id

Вообщем обычным if обойдусь.
И Valick не прав! Вопрос был задан очень простой так как я ранее писал все по другому - в таблицах не было NULL значений. Они по умолчанию были на нет для апгрейдов и так далее. Сейчас же я переписываю код - и браузерка уже давно написана.
AllesKlar
Цитата (null_upd @ 10.12.2016 - 13:28)
Вообщем обычным if обойдусь.

Если у тебя в таблице будет 1000 записей, ты будешь в цикле 1000 запросов к базе отправлять, вместо одного?
А если 10 000?
Твой сервер базы данных скажет "пока".

_____________
[продано копирайтерам]
walerus
AllesKlar
"жираф большой - ему виднее" B)

UPDATE 
`tables`,
`tables2`
SET
`tables2`.`a`= NULL
WHERE

`tables`.`a` IS NULL
AND

`tables`.`id` = `tables2`.`id`
глобальный апдейт таблицы 2, если в таблице 1 есть поля со значением NULL, при условии что привязка идет по id
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.