我在我的搜索中有多个选择,收集我所有的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个等等
我希望我已经足够清楚了
答案 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;
您现在可以在其他查询中使用该值。