@Dmax99

Как правильно сформировать запрос в MySql, не вижу ошибки?

Здравствуйте ребята!
Не могу понять где ошибка, нехватает знаний, вроде все ОК но не совсем.

Запрос вытаскивает с базы информацию по бренду, а именно категории в которых присутствует этот бренд.
Проблема в том, что если бренд пустой, без товаров, выдает ошибку
Fatal error: Uncaught Exception: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cd ON (cd.category_id = ptc.category_id) LEFT JOIN oc_category c ON (c.cate' at line 1
Error No: 1064
SELECT ptc.category_id, cd.name, c.oct_image FROM oc_product_to_category ptcoc_category_description cd ON (cd.category_id = ptc.category_id) LEFT JOIN oc_category c ON (c.category_id = ptc.category_id) WHERE ptc.product_id IN () AND cd.language_id = '1' GROUP BY ptc.category_id

Но если товары есть, все отлично работает.

Вот сам код с manufacturer.php
public function getManufacturerCategory($manufacturer_id, $product_ids){
    
$query = $this->db->query("SELECT ptc.category_id, cd.name, c.oct_image FROM " . DB_PREFIX . "product_to_category ptc LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = ptc.category_id) LEFT JOIN " . DB_PREFIX . "category c ON (c.category_id = ptc.category_id) WHERE ptc.product_id IN (" . $product_ids . ") AND cd.language_id = '" . (int)$this->config->get('config_language_id')."'  GROUP BY ptc.category_id");
	 
    $seo_url_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE query = 'manufacturer_id=" . (int)$manufacturer_id . "'");
    $seo_url = $seo_url_query->row['keyword'];
    foreach($query->rows as $key=> $item){
        $data[$key]['category_id'] = $item['category_id'];
        $data[$key]['name'] = $item['name'];
        $data[$key]['link'] = $this->url->link('product/category', 'path=' . $item['category_id']).  $seo_url.'/';
        $data[$key]['image'] = $this->model_tool_image->resize($item['oct_image'], 100, 100);
    }
    return $data;
    }

Если . $product_ids . заключить в дополнительные одинарные скобки, то ошибки в пустом бренде не будет, но в том бренде где много товаров, выведиться только одна категория а не все... Второй день ищу как исправить и все никак...
Заранее большое спасибо за помощь!
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
те... SQL должен вытащить ТОЛЬКО те категории где есть product_id'шники.... а те категории где product_id нет, не показвать.. так?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вообще-то ошибка показывает на совершенно другую проблему.
В вашем коде:
FROM " . DB_PREFIX . "product_to_category ptc LEFT JOIN  . DB_PREFIX . "category_description"

Тот же фрагмент в тексте ошибки:
FROM oc_product_to_category ptcoc_category_description

Куда делся LEFT JOIN oc_?

А проблема с пустым $product_id решается элементарно. Достаточно предварительно проверять переменную и заменять её на фиктивное значение, например -1.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽