Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Правильно ли я написал условие для запроса mysql


Recommended Posts

Подскажите, правильно ли делаю условие для запроса?
Нужно когда quantity с минусом (-1, -2, ....) менять его на "0" что бы в базу НЕ записывать значения с "-", а просто "0"

И еще такой вопрос, на сколько это условие замедляет выполнение скрипта?

if (!$product['Quantity'] < 0) {
	$sql = "UPDATE " . DB_PREFIX . "product SET quantity='" . db_escape($product['Quantity']) . "', price='" . db_escape($product['Price']) . "' WHERE sku='" . db_escape($product['BarCode']) . "' LIMIT 1";
} else
	$sql = "UPDATE " . DB_PREFIX . "product SET quantity='0', price='" . db_escape($product['Price']) . "' WHERE sku='" . db_escape($product['BarCode']) . "' LIMIT 1";                        
}

 

 

Надіслати
Поділитися на інших сайтах


В 07.05.2018 в 21:11, Otvet сказал:

UPDATE ... SET quantity=0 WHERE quantity < 0

А как правильно его написать?
как то так?

$sql = "UPDATE " . DB_PREFIX . "product SET quantity='" . db_escape($product['Quantity']) . "', (UPDATE " . DB_PREFIX . "product SET quantity = 0 WHERE $product['Quantity']) < 0), price='" . db_escape($product['Price']) . "' WHERE sku='" . db_escape($product['BarCode']) . "' LIMIT 1";

 

Надіслати
Поділитися на інших сайтах


тогда уж как-то вот так
 

$sql = "UPDATE " . DB_PREFIX . "product SET quantity='" . ($this->db->escape($product['Quantity']) < 0 ? '0' : $this->db->escape($product['Quantity'])) . "', price='" . $this->db->escape($product['Price']) . "' WHERE sku='" . $this->db->escape($product['BarCode']) . "' LIMIT 1";

используйте функционал движка + определитесь с типами данных

 

Надіслати
Поділитися на інших сайтах

11 часов назад, AlexDW сказал:

тогда уж как-то вот так
 


$sql = "UPDATE " . DB_PREFIX . "product SET quantity='" . ($this->db->escape($product['Quantity']) < 0 ? '0' : $this->db->escape($product['Quantity'])) . "', price='" . $this->db->escape($product['Price']) . "' WHERE sku='" . $this->db->escape($product['BarCode']) . "' LIMIT 1";

используйте функционал движка + определитесь с типами данных

 


Спасибо. Еще такой момент. Если чисел отрицательных 1% от положительных, не стоит ли делать проверку на оборот? 
то есть так:

product SET quantity='" . ($this->db->escape($product['Quantity']) > 0 ? $this->db->escape($product['Quantity'])) : '0' . "',

 

10 часов назад, chukcha сказал:

И... а limit зачем?

наверное на случай, когда BarCode попадет дублирующий

Надіслати
Поділитися на інших сайтах


не ясно, как именно и откуда вы берете данные $product для своего запроса

но limit будет срабатывать на первой встреченной позиции

и не факт, что это будет та же самая, что и в $product

 

правильней использовать уникальный идентификатор product_id (или что у вас там) вместо limit

Надіслати
Поділитися на інших сайтах

5 минут назад, AlexDW сказал:

правильней использовать уникальный идентификатор product_id

Эх.. а я хотел, чтобы автор сам дошел до этого

Надіслати
Поділитися на інших сайтах

3 минуты назад, AlexDW сказал:

не ясно, как именно и откуда вы берете данные $product для своего запроса

но limit будет срабатывать на первой встреченной позиции

и не факт, что это будет та же самая, что и в $product

Данные берутся из xml...
скрипт писал давно другой человек. 
Мне же нужно что бы quantity -1, -2... (которые могут быть в xml) не попадали в базу. по этому и хочу сделать их замену на '0'
 

function update_product($product) {
    if (empty($product['BarCode'])) {
        return;
    }

    $sql = "UPDATE " . DB_PREFIX . "product SET quantity='" . db_escape($product['Quantity']) . "', 
    price='" . db_escape($product['Price']) . "' WHERE sku='" . db_escape($product['BarCode']) . "' LIMIT 1";

    db_query($sql);

    echo 'up ' . $product['BarCode'] . ' - ' . $product['Price'] . ' - ' . $product['Quantity'] . "<br>\r\n";
}

function parse_import_product($str) {
    $xml = new SimpleXMLElement($str);
    $data['Quantity'] = (int)str_replace(',', '.', (string)$xml['Quantity']);
    $data['BarCode'] = trim((string)$xml['BarCode']);
    $data['Price'] = str_replace(',', '.', (string)$xml['Price']);

    return $data;
}

 

Надіслати
Поділитися на інших сайтах


function update_product($product) {

>>

function update_product($product) {

if ($product['Quantity'] < 0) {
    $product['Quantity'] = 0;
} else {
    $product['Quantity'] = $product['Quantity'];
}

а от sql отстаньте.

Надіслати
Поділитися на інших сайтах

1 час назад, afwollis сказал:

function update_product($product) {

>>


function update_product($product) {

if ($product['Quantity'] < 0) {
    $product['Quantity'] = 0;
} else {
    $product['Quantity'] = $product['Quantity'];
}

а от sql отстаньте.

Не подумал о таком варианте...
Спасибо.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.