MySQL, запрос LIKE и JOIN и AJAX. Что не так??

Тема в разделе "Базы данных", создана пользователем fortuner, 17 апр 2018.

Метки:
Модераторы: latteo
  1. fortuner

    fortuner

    Регистр.:
    26 июн 2012
    Сообщения:
    519
    Симпатии:
    712
    Всем привет! Пишу тут модуль под магазин свой. Задача - фильтровать заказы в админке.
    Все работает прекрасно, кроме LEFT JOIN к другой таблице, чтобы делать SELECT по имени пользователя.
    Вот код:
    PHP:
    $sql 'SELECT
        o.`id_order`
    FROM
        `'
    ._DB_PREFIX_.'orders` o
         // Тут начинаются проблемы
        '
    .($customer ' LEFT JOIN `'._DB_PREFIX_.'customer` c ON o.`id_customer` = c.`id_customer`' '').'
    WHERE 1

    // Тут работает (код заказа)
    '
    .($reference ' AND o.`reference` LIKE "%'.$reference.'%"' '')
    // А тут не работает (имя пользователя)
    .($customer ' AND c.`lastname` LIKE "%'.$customer.'%"' '')
    // Тут опять все работает (тип доставки)
    .($id_carrier ' AND o.`id_carrier` LIKE "%'.$id_carrier.'%"' '');

    Синтаксическая ошибка? Где?
    Моцк сломал уже.
     
  2. Black Hat

    Black Hat

    Регистр.:
    15 май 2015
    Сообщения:
    155
    Симпатии:
    101
    Конечный нерабочий вариант SQL какой? Таблица 'customer` точно есть? Какая ошибка MySQL?
     
  3. fortuner

    fortuner

    Регистр.:
    26 июн 2012
    Сообщения:
    519
    Симпатии:
    712
    Судя по всему, ошибка где-то в PHP. Написал отдельно запрос в phpMyAdmin вот так:
    PHP:
    SELECT
    o
    .`id_order`
    FROM
    `ps_orderso
    LEFT JOIN 
    `ps_customerc ON o.`id_customer` = c.`id_customer`
    WHERE 1
    AND c.`lastnameLIKE "%Doe%"
    И все прекрасно работает.
    Ошибок MySQL вроде нет, просто возвращает пустой массив.
     
  4. fortuner

    fortuner

    Регистр.:
    26 июн 2012
    Сообщения:
    519
    Симпатии:
    712
    Ок, все запилил, все работает.
    Можно еще один вопрос немного не по теме?
    Нужно ли делать условия для LEFT JOIN?
    Ну в смысле, если не запрашиваются данные из другой таблицы, убирать ли LEFT JOIN к ней?
    Вот так:
    PHP:
    ($customer ' LEFT JOIN `'._DB_PREFIX_.'customer` c ON o.`id_customer` = c.`id_customer`' '')
    Или просто так:
    PHP:
    LEFT JOIN `'._DB_PREFIX_.'customerc ON o.`id_customer` = c.`id_customer`
     
  5. fortuner

    fortuner

    Регистр.:
    26 июн 2012
    Сообщения:
    519
    Симпатии:
    712
    Ошибка была, кстати совсем тупая.
    После WHERE 1 не хватало пробела и один (именно один!) из следующих запросов сливался в WHERE 1AND бла-бла-бла.