2014-10-06 36 views
0

我有以下的sql语句,它可以很好地工作,但排序并不像我希望的那样工作。在我的sql语句中排序有问题

SELECT article_type as search 
FROM appendix_article_type 
WHERE article_type LIKE '%".$keyword."%' 
ORDER BY CASE 
WHEN article_type like '".$keyword." %' THEN 0 
WHEN article_type like '".$keyword."%' THEN 1 
WHEN article_type like '% ".$keyword."%' THEN 2 
ELSE 3 END, article_type 

当我键入字母V它呈现出的顺序如下:

//search 
Volleyball - Sand 
Scenic Views 
Vacation Rentals 
Volleyball - Indoor 
Online - Delivery 
Snorkeling & Diving 

我希望它是这样

//search 
Vacation Rentals 
Volleyball - Indoor 
Volleyball - Sand 
Scenic Views 
Online - Delivery 
Snorkeling & Diving 

UPDATE /编辑:

我有点想出了我的问题。我有一个工会附属于它,我认为是造成问题。如果我删除了工会,它工作得很好。

(SELECT article_type as search, "Article Type" as search_type, "article-type" as search_page 
FROM appendix_article_type 
WHERE article_type LIKE '%v%' 
ORDER BY CASE WHEN article_type like 'v %' THEN 0 
WHEN article_type like 'v%' THEN 1 
WHEN article_type like '% v%' THEN 2 
ELSE 3 END, article_type) 
UNION (
    SELECT DISTINCT(article_title) as search, "Article" as search_type, article_type_page as search_page 
    FROM system_article 
    INNER JOIN appendix_article_type ON system_article.article_type_id = appendix_article_type.article_type_id 
    WHERE article_status = '1' 
    AND article_title LIKE '%v%' 
    ORDER BY CASE WHEN article_title like 'v %' THEN 0 
    WHEN article_title like 'v%' THEN 1 
    WHEN article_title like '% v%' THEN 2 
    ELSE 3 END, article_title 
) 
+0

删除案例,并通过article_type订购 – radar 2014-10-06 22:40:04

+0

查看我的更新... – Christian 2014-10-07 12:22:05

回答

1

它在这里工作:

drop table if exists appendix_article_type; 
create table appendix_article_type (article_type text); 
insert into appendix_article_type values 
('Volleyball - Sand'), 
('Scenic Views'), 
('Vacation Rentals'), 
('Volleyball - Indoor'), 
('Online - Delivery'), 
('Snorkeling & Diving'); 


SELECT article_type as search 
FROM appendix_article_type 
WHERE upper(article_type) LIKE '%V%' 
ORDER BY CASE 
WHEN upper(article_type) like 'V %' THEN 0 
WHEN upper(article_type) like 'V%' THEN 1 
WHEN upper(article_type) like '% V%' THEN 2 
ELSE 3 END, article_type; 

结果:

"Vacation Rentals" 
"Volleyball - Indoor" 
"Volleyball - Sand" 
"Scenic Views" 
"Online - Delivery" 
"Snorkeling & Diving" 

更新:

你必须 “按订单” 做你的 “联盟”

SELECT * 
FROM 
(  

    SELECT article_type as search, "Article Type" as search_type, "article-type" as search_page 
    FROM appendix_article_type 
    WHERE article_type LIKE '%v%' 

    UNION 

    SELECT article_title as search, "Article" as search_type, article_type_page as search_page 
    FROM system_article 
    INNER JOIN appendix_article_type ON system_article.article_type_id = appendix_article_type.article_type_id 
    WHERE article_status = '1' 
    AND article_title LIKE '%v%' 


) A 

ORDER BY 
    CASE WHEN search like 'v %' THEN 0 
      WHEN search like 'v%' THEN 1 
      WHEN search like '% v%' THEN 2 
      ELSE 3 
    END, 
    search 
+0

如果您愿意查看我的更新,我发现“问题”但需要解决方案的帮助。 – Dom 2014-10-06 23:23:38