2013-04-16 3 views
0

Я действительно борюсь за то, как добиться этого, и надеюсь, что кто-то может мне помочь. У меня есть существующие функции и запрос:Обновить одну таблицу, где запись найдена в другой таблице

public function setStockAndPrice($product_id) { 
    $query = $this->db->query('UPDATE ' . DB_PREFIX . 'product SET quantity = 0, price = 0.00 WHERE product_id = ' . (int)$product_id) 
}

Это работает, но он устанавливает все продукты к нулю, когда я на самом деле хочу это только набор продуктов, к нулю, когда этот продукт существует в другой таблице.

т.е., в пояснительных терминах:

public function setStockAndPrice($product_id) { 
    $query = $this->db->query('UPDATE ' . DB_PREFIX . 'product SET quantity = 0, price = 0.00 WHERE product_id = ' . (int)$product_id AND product_id exists in CustomerProducts) 
}

Я не сведущий с соединениями, но я не уверен, что даже нужно использовать присоединиться здесь как запрос кажется более простым, чем это.

Может ли кто-нибудь указать мне правильное направление?

спасибо.

Роб

ответ

2
public function setStockAndPrice($product_id) { 
    $query = $this->db->query('UPDATE ' . DB_PREFIX . 'product SET quantity = 0, price = 0.00 WHERE product_id = ' . (int)$product_id ." AND product_id =(select DISTINCT(product_id) from CustomerProducts where product_id= $product_id)") 
    } 

Это может работать.

+0

Большое спасибо за Ваш ответ. Я попытался выполнить это, но он дал ошибку - синтаксическую ошибку, неожиданную '='. Извините - все идеи? – Rob

+0

отредактировал мой ответ, вам нужно поставить «before and..check now». – saveATcode

+0

Еще раз спасибо, но извините еще раз - в то время как код запустился на этот раз, когда он добрался до такой степени, он придумал эту ошибку: PHP Примечание: ошибка : Подзапрос возвращает более 1 строки
Ошибка №: 1242
UPDATE product SET quantity = 0, price = 0.00 WHERE product_id = 4392 AND product_id = (выберите product_id из CustomerProducts где product_id = 4392) в/home/sites/opencart/dev/system/database/mysql.php в строке 49 Я не уверен, почему он вернул несколько строк, но неважно, сколько записей в таблице CustomerProducts существует только в том случае, если оно существует. Обновите его, если он существует, t, если это не так. – Rob

0

Использование этого будет работать, поскольку вы не назначаете db.product и убедитесь, что вы записываете запрос в строку, а затем выполняете.

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

public function setStockAndPrice($product_id) { 
    $query_string = "UPDATE " . DB_PREFIX . ".product SET quantity = '0', price = '0.00' WHERE product_id = '$product_id'"; 

    // echo "Query : " . $query_string; 

    $query = $this->db->query($query_string); 
} 
0
public function setStockAndPrice($product_id) { 
     $query = $this->db->query('UPDATE ' . DB_PREFIX . '.product p, ' . DB_PREFIX . '.CustomerProducts cp SET p.quantity = 0, p.price = 0.00 WHERE p.product_id = ' . (int)$product_id . ' AND p.product_id = cp.product_id'); 
    } 
Смежные вопросы