使用取决于order子句的值将temp列添加到mysql查询

时间:2013-08-06 12:10:19

标签: mysql sql

我在我的搜索中有多个选择,收集我所有的look_up_to_cat_id,每个都按照此订单条款的相关性进行排序。

WHEN '.$searchProperties['col'].' LIKE \''.$term.'\' THEN '.$c_0++.' 
WHEN '.$searchProperties['col'].' LIKE \''.$term.'%\' THEN '.$c_20++.'
WHEN '.$searchProperties['col'].' LIKE \'%'.$term.'%\' THEN '.$c_40++;

我的问题是当我开始结合我的所有结果时,我的排序都搞砸了。我希望能够在我的查询中添加一个列,其中包含上述数字之一$ c_0或$ c_20或$ c40,具体取决于哪个order子句应用于结果,以便我可以将所有记录集合并到一个数组中使用这些数字在数组中正确排序

这是我的一个实际的SQL语句,可以给你一个想法。

SELECT `catelogue`.*,`release_date`.`RELEASE_DATE` FROM catelogue 
LEFT JOIN `release_date` ON `catelogue`.`RELEASEDATE_ID` = `release_date`.`ID` 
WHERE TITLE LIKE '%barbie%' 
GROUP BY ID 
ORDER BY 
(CASE WHEN TITLE LIKE 'barbie' THEN 0 
WHEN TITLE LIKE 'barbie%' THEN 200 
WHEN TITLE LIKE '%barbie%' THEN 400 
ELSE 600 END ),
( CASE WHEN TITLE LIKE 'barbie' THEN RELEASE_DATE 
WHEN TITLE LIKE 'barbie%' THEN RELEASE_DATE 
WHEN TITLE LIKE '%barbie%' THEN RELEASE_DATE END) desc,TITLE

所以基本上所有匹配'芭比娃娃'的东西在临时颜色中都会有0然后匹配'芭比%'的所有东西都会有200个等等

我希望我已经足够清楚了

1 个答案:

答案 0 :(得分:1)

只需将case语句移到select子句中:

SELECT `catelogue`.*,`release_date`.`RELEASE_DATE`,
       (CASE WHEN TITLE LIKE 'barbie' THEN 0 
             WHEN TITLE LIKE 'barbie%' THEN 200 
             WHEN TITLE LIKE '%barbie%' THEN 400 
             ELSE 600
        END ) as order1,
FROM catelogue 
LEFT JOIN `release_date` ON `catelogue`.`RELEASEDATE_ID` = `release_date`.`ID` 
WHERE TITLE LIKE '%barbie%' 
GROUP BY ID 
ORDER BY 
order1,
( CASE WHEN TITLE LIKE 'barbie' THEN RELEASE_DATE 
WHEN TITLE LIKE 'barbie%' THEN RELEASE_DATE 
WHEN TITLE LIKE '%barbie%' THEN RELEASE_DATE END) desc,TITLE;

您现在可以在其他查​​询中使用该值。