[Решено] С конструкцией запроса к БД

Тема в разделе "OpenCart", создана пользователем Jess23, 31 окт 2016.

Статус темы:
Закрыта.
  1. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Привет всем, опять прошу помощи у тех кто разбирается и даст правильные корректировки, или подскажет куда смотреть в данной ситуации.

    Создал дополнительные поля для производителей, мета, дескрипшин, кей... При конструкции ниже работает как нужно... Но суть в чем, при наполнении магазина производители создаются автоматически исходя из загружаемых товаров, но у менять при заполнении производителя есть ещё обязательное поле "Meta" которое обязательно к заполнению.... Если же поле не заполнено то почему-то я получаю уведомления что данный производитель не найден. Ну и если значения меты заполнено то все работает как нужно и производитель подтягивается.

    Имею такую конструкцию запроса к БД:
    PHP:
    $query $this->db->query("SELECT * FROM " DB_PREFIX "manufacturer m LEFT JOIN " DB_PREFIX "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) JOIN " DB_PREFIX "manufacturer_description md ON (md.manufacturer_id='" . (int)$manufacturer_id "') AND (md.language_id='" . (int)$this->config->get('config_language_id') . "')  WHERE m.manufacturer_id = '" . (int)$manufacturer_id "' AND m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
    А вот оригинальный запрос из версии OC 2.0.3.1
    PHP:
    $query $this->db->query("SELECT * FROM " DB_PREFIX "manufacturer m LEFT JOIN " DB_PREFIX "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE m.manufacturer_id = '" . (int)$manufacturer_id "' AND m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
    Как вы заметили разница только вот в этом:
    PHP:
    JOIN " . DB_PREFIX . "manufacturer_description md ON (md.manufacturer_id='" . (int)$manufacturer_id . "') AND (md.language_id='" . (int)$this->config->get('config_language_id') . "')

    Как правильно откорректировать запрос чтобы если значение meta не заполнено то выполнять запрос аналогичный коробочному варианту или может дополнительное условие?...
     
  2. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    я бы посоветовал при импорте, добавить условите по типу:
    if (!isset($data['meta'])) { $data['meta'] = $data['name']; }

    по задаче с запросами не могу въехать, если можно переформулировать вопрос или уже с завтра пересмотрю...
     
    Jess23 нравится это.
  3. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Извините, старался как можно доступней объяснить.

    Очень благодарен за ответ уважаемый @Baco, уже разобрался сам, все дело было в LEFT JOIN. При конструкции ниже все работает как нужно и подгружаются мета тайтлы для производителя.

    PHP:
    $query $this->db->query("
    SELECT *
    FROM " 
    DB_PREFIX "manufacturer m
    LEFT JOIN " 
    DB_PREFIX "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id)
    LEFT JOIN " 
    DB_PREFIX "manufacturer_description md ON (md.manufacturer_id='" . (int)$manufacturer_id "') AND (md.language_id='" . (int)$this->config->get('config_language_id') . "') 
    WHERE m.manufacturer_id = '" 
    . (int)$manufacturer_id "'
    AND m2s.store_id = '" 
    . (int)$this->config->get('config_store_id') . "'");
     
    Baco нравится это.
Статус темы:
Закрыта.