0

我在搜索中进行了多项选择,收集了我所有的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 取决于哪个顺序子句适用于结果,以便我可以将所有记录集组合成一个数组和使用这些数字在数组中正确排序它们

这是我给你一个想法的实际 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

所以基本上所有匹配 'barbie' 的东西都会在 temp col 中有 0 然后匹配 'barbie%' 的所有东西都会有 200 等等

我希望我已经足够清楚了

4

1 回答 1

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;

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

于 2013-08-06T12:15:27.457 回答