Я получаю сообщение об ошибке «Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с« ORDER BY стр. promo_code
ASC 'по строке 1 "в моем заказе по предложениям и им не известно, почему, когда я НЕ-CONCAT запрос, кажется, работает нормально.Синтаксис синтаксиса таблицы MySQL CONCAT
Я что-то упустил? Вот мой код:
SET _select = CONCAT("SELECT p.`promo_code` AS code, p.`name` AS username, p.`company` AS company ");
SET _select = CONCAT(_select, " FROM `promos` AS p");
SET _where = CONCAT(" WHERE 1 = 1");
IF _promoCode IS NOT NULL THEN
SET _where = CONCAT(_where, " AND (p.`promo_code` LIKE '%", _promoCode, "%'");
END IF;
IF _companyName IS NOT NULL THEN
SET _where = CONCAT(_where, " AND (p.`company` LIKE '%", _companyName, "%'");
END IF;
IF _userName IS NOT NULL THEN
SET _where = CONCAT(_where, " AND (p.`name` LIKE '%", _userName, "%'");
END IF;
-- SET _where_total = _where;
#SORT option protocols, 1 is promocode, 2 is company, 3 is name; Second number is ASC/DESC
IF _sortOrder IS NOT NULL THEN
CASE _sortOrder
WHEN 10 THEN
SET _where = CONCAT(_where, " ORDER BY p.`promo_code` ASC");
WHEN 11 THEN
SET _where = CONCAT(_where, " ORDER BY p.`promo_code` DESC");
WHEN 20 THEN
SET _where = CONCAT(_where, " ORDER BY p.`company` ASC");
WHEN 21 THEN
SET _where = CONCAT(_where, " ORDER BY p.`company` DESC");
WHEN 30 THEN
SET _where = CONCAT(_where, " ORDER BY p.`name` ASC");
WHEN 31 THEN
SET _where = CONCAT(_where, " ORDER BY p.`name` DESC");
ELSE
SELECT "Please use valid sort protocol";
END CASE;
END IF;
/*SET _where = CONCAT(_where, " LIMIT ", _start, ", ", _records);*/
SET @query = CONCAT(_select, _where);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET _select_total = "SELECT COUNT(p.`promo_code`) AS total_matching_promos ";
SET _select_total = CONCAT(_select_total, " FROM `promos` AS p ");
SET @query = CONCAT(_select_total, _where_total);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;