我的查询看起来像这样:
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
答案 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
顺便说一下,使用表别名是个好习惯。