忽略部分字符串和不同

时间:2016-07-22 11:10:50

标签: mysql sql

我的查询看起来像这样:

SELECT paginas_acesso.id, tipo_acesso, tipos_acesso.nome_modulo, nome_pagina, IF(nome_pagina LIKE '/main%', TRUE, FALSE) AS main, IF(nome_pagina LIKE '/test%', TRUE, FALSE) AS test
FROM paginas_acesso
LEFT JOIN tipos_acesso ON tipo_acesso=tipos_acesso.id
WHERE tipo_acesso=40
ORDER BY nome_pagina ASC

结果如下:

id  tipo_acesso nome_modulo        nome_pagina          main test
11     40          teste      /main/teste/teste.php      1    0
10     40          teste      /test/teste/teste.php      0    1

但我想忽略" / main"和" / test"在列" nome_pagina"并且只显示一行。

这样的事情:

id  tipo_acesso nome_modulo   nome_pagina     main test
11     40          teste    /teste/teste.php   1    1

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

SELECT (CASE WHEN nome_pagina LIKE '/main/%' THEN substr(nome_pagina, 7)
             WHEN nome_pagina LIKE '/test/%' THEN substr(nome_pagina, 7)
             ELSE nome_pagina
        END)

答案 1 :(得分:1)

这应该给出你想要的结果:

SELECT      MAX(paginas_acesso.id) id
,           MAX(tipo_acesso) tipo_acesso
,           MAX(tipos_acesso.nome_modulo) nome_modulo
,           SUBSTRING(nome_pagina, 6, LEN(nome_pagina) - 5) nome_pagina
,           MAX(IF(nome_pagina LIKE '/main%', TRUE, FALSE)) AS main
,           MAX(IF(nome_pagina LIKE '/test%', TRUE, FALSE)) AS test
FROM        paginas_acesso
LEFT JOIN   tipos_acesso 
        ON  tipo_acesso = tipos_acesso.id
WHERE       tipo_acesso = 40
GROUP BY    SUBSTRING(nome_pagina, 6, LEN(nome_pagina) - 5) nome_pagina
ORDER BY    SUBSTRING(nome_pagina, 6, LEN(nome_pagina) - 5) ASC

顺便说一下,使用表别名是个好习惯。