Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

[Решено] Правильно ли я написал условие для запроса 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";                        
}

 

 

Link to post
Share on other sites

В 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";

 

Link to post
Share on other sites

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

$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";

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

 

Link to post
Share on other sites
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 попадет дублирующий

Link to post
Share on other sites

9 минут назад, s89 сказал:

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

И.. что?

Link to post
Share on other sites

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

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

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

 

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

Link to post
Share on other sites
5 минут назад, AlexDW сказал:

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

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

Link to post
Share on other sites
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;
}

 

Link to post
Share on other sites

function update_product($product) {

>>

function update_product($product) {

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

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

Link to post
Share on other sites
1 час назад, afwollis сказал:

function update_product($product) {

>>


function update_product($product) {

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

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

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.