如何应用案例列搜索

时间:2017-08-28 13:42:14

标签: mysql

我有一个用户表,其中我有三个字段id,email,u_firstname,u_status 其中我必须在这个表格上使用案例函数进行搜索。

users table structure
...........................................................................
id    email                       u_firstname    status(0=inactive,1=active)
...........................................................................
1     varunjoshi919@gmail.com      varun              1
2     abc@gmail.com                abc                0

我写下面的查询,其中我使用了mysql的case函数 如果0来了,那就像那样工作,然后非活动就像一个字符串或 如果1来自db,那么active将显示如下

查询

SELECT `id`,`email`,`u_firstname`,case u_status when '0' then 'inactive' when '1' then 'active' end as status FROM `users` 

运行上述查询后,我得到了这个输出   来自用户表结构

...........................................................................
id    email                       u_firstname    status(0=inactive,1=active)
...........................................................................
1     varunjoshi919@gmail.com      varun              active
2     abc@gmail.com                abc                inactive

在此之后,如果我写的话,我必须在这张桌子上进行搜索 ac或任何用户状态的起始字母,然后我们将获得所有活动用户的列表。

当我在搜索框中键入活动用户记录时,我需要此输出

...........................................................................
    id    email                       u_firstname    status(0=inactive,1=active)
    ...........................................................................
    1     varunjoshi919@gmail.com      varun              active

我已经尝试过以下查询,但它没有给出任何记录。

SELECT `id`,`email`,`u_firstname`,case u_status when '0' then 'inactive' when '1' then 'active' end as status FROM `users` where `u_status` like 'ac%' 

3 个答案:

答案 0 :(得分:1)

您可以使用LIKE

SELECT t.*
FROM ( Your Query ) t
WHERE t.status LIKE 'ac%' -- for active
//WHERE t.status like 'in%' -- for inactive

%通配符基本上说:没有任何内容或所有内容,而不是标志。

actkfkd LIKE 'ac%' -- TRUE
atcdas  LIKE 'ac%' -- FALSE
ac      LIKE 'ac%' -- TRUE

答案 1 :(得分:0)

您必须过滤第一个查询的结果:

SELECT * FROM 
(SELECT `id`,`email`,`u_firstname`,case u_status when '0' then 'inactive' when '1' then 'active' end as status FROM `users`) a
where `status` like 'ac%'

答案 2 :(得分:0)

我认为你应该使用别名status而不是原来的u_status列。

`SELECT `id`,`email`,`u_firstname`,
case u_status when '0' then 'inactive' 
              when '1' then 'active' end as status 
FROM `users` 
where `status` like 'ac%'