ORDER BY релевантность при использовании параметризованных значений - PullRequest
1 голос
/ 02 октября 2011

Я нашел следующий запрос в Интернете:

SELECT company_title
  FROM companies 
 WHERE company_title like '%gge%'
 GROUP BY company_title 
 ORDER BY CASE WHEN company_title like 'gge%' THEN 0 
               WHEN company_title like '% %gge% %' THEN 1 
               WHEN company_title like '%gge' THEN 2 
               ELSE 3 
          END, company_title 
          limit 100

, который отлично работает.Дело в том, что я передаю параметр в качестве значения, а затем происходит сбой.поэтому вопрос в том, как использовать этот запрос с параметризованными значениями?

примером для программиста mysql может быть определение переменной в верхней части SET @what = '%gge%', а затем ее использование в запросе.

Ответы [ 2 ]

0 голосов
/ 02 октября 2011

Переместите оператор case when в выбранную деталь и назовите его оператором order by по псевдониму.

SELECT company_title
       ,CASE WHEN company_title like CONCAT(@param,'%') THEN 0 
             WHEN company_title like CONCAT('% %',@param,'% %') THEN 1 
             WHEN company_title like CONCAT('%',@param) THEN 2 
             ELSE 3 
        END as relevance
  FROM companies 
 CROSS JOIN (SELECT @param:= ?) as trick_to_set_at_param_in_one_go
 WHERE company_title like CONCAT('%',@param,'%')
 GROUP BY company_title 
 ORDER BY relevance, company_title 
 LIMIT 100
0 голосов
/ 02 октября 2011

Нельзя использовать переменные в предложении order by.

Вы должны использовать динамический SQL, проверьте это: http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html

...