2013-05-28 74 views
0
SELECT 
    DISTINCT(p_title), title 
FROM 
`reg` 
WHERE 
(C_title REGEXP '[ENGINE]' or C_title REGEXP '[ENGINEER]') 
AND title IN ('Prof. Dr.','Dr.','Mr.') 

MySQL的订购 - 在

ORDER BY FIELD (title,'Prof. Dr.','Dr.') 

我想列出只在我查询博士,教授和博士领域。但是第一位教授和第二位博士....但是,这些代码不起作用。

    WHEN title = 'Prof. Dr.' THEN 1 
       WHEN title = 'Assoc. Prof. Dr.' THEN 2 
       WHEN title = 'Assist. Prof. Dr.' THEN 3 
       WHEN title = 'Dr.' THEN 4 
       WHEN title != 'Ms.' THEN 5 
       WHEN title != 'Mr.' THEN 6 
       ELSE 7 

你能告诉我其他的方法吗?

+0

考虑发布一个SQLFIDDLE,所以我们可以看到你的结构和内容实际上是什么样子。 – Strawberry

+0

你的情况/什么时候是我过去最常用的方式,但是所有的“标题”字段都包含这个主要组件,而不是实际名称?你想在每个“教授博士”,“副教授博士”等名称中按字母顺序排列吗?你能列出一些实际的“标题”值来帮助确认你的期望吗? – DRapp

回答

0

使用的enumerated场包含所有可能的值,为索引性能更佳,更小的数据量和更好的误差较小(如某人缺少点“先生”后,

你要找的堆叠如果-statements:

SELECT title, IF('title' = 'Mr.', 1, 
    IF (title = 'Mrs.', 2, 
     IF (title = 'Dr.', 3, 0) 
    ) 
) 
AS title_number 
FROM users... 

将返回

title | title_number 
-------------------- 
"Mr." | 1 
"xxx" | 0 

...