2015-01-15 3 views
0

Я получаю сообщение об ошибке «Код ошибки: 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; 

ответ

0

Обнаружена проблема.

Есть некоторые открывающие скобки в условном ИНЕКЕ:

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; как раз перед SET @query = CONCAT(_select, _where);

Не слепо копировать вставлять код людей: P

Смежные вопросы