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

fortuner

Хранитель порядка
Регистрация
26 Июн 2012
Сообщения
631
Реакции
1.136
Всем привет! Пишу тут модуль под магазин свой. Задача - фильтровать заказы в админке.
Все работает прекрасно, кроме 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.'%"' : '');

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

Black Hat

Постоялец
Регистрация
15 Май 2015
Сообщения
167
Реакции
111
Конечный нерабочий вариант SQL какой? Таблица 'customer` точно есть? Какая ошибка MySQL?
 

fortuner

Хранитель порядка
Регистрация
26 Июн 2012
Сообщения
631
Реакции
1.136
Судя по всему, ошибка где-то в PHP. Написал отдельно запрос в phpMyAdmin вот так:
PHP:
SELECT
o.`id_order`
FROM
`ps_orders` o
LEFT JOIN `ps_customer` c ON o.`id_customer` = c.`id_customer`
WHERE 1
AND c.`lastname` LIKE "%Doe%"
И все прекрасно работает.
Ошибок MySQL вроде нет, просто возвращает пустой массив.
 

fortuner

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

fortuner

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