Código MySQL:
Ver original p.*,
g.nombre
as generonombre
, FROM #__documentos_subgeneros AS p LEFT JOIN #__documentos_generos AS g ON g.id = p.idgenero'
Manual Cita: CHAR_LENGTH(str)
Retorna la longitud de la cadena de caracteres str, medida en caracteres. Un carácter de múltiples bytes cuenta como un sólo carácter. Esto significa que para una cadena de caracteres que contiene cinco caracteres de dos bytes, LENGTH() retorna 10, mientras CHAR_LENGTH() returna 5.
Cita: CONCAT_WS(separator,str1,str2,...)
CONCAT_WS() significa CONCAT With Separator (CONCAT con separador) y es una forma especial de CONCAT(). El primer argumento es el separador para el resto de argumentos. El separador se añade entre las cadenas a concatenar. El separador puede ser una cadena como el resto de argumentos. Si el separador es NULL, el resultado es NULL. La función evita valores NULL tras el argumento separador.
mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');
-> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');
-> 'First name,Last Name'
En MySQL 5.0, CONCAT_WS() no evita cadenas vacías. (Sin embargo, evita NULLs.)
CASE WHEN condición
THEN si condición es cierta
ELSE si no es cierta
END
Parece que tu condicional esta incompleto puesto que
CHAR_LENGTH(p.alias) no es en si mismo una condición, solo lo seria si el resultado de la función fuese un booleano (true/false), como puedes leer en el manual no es el caso.
Es mucho suponer pero si de lo que se trata es de evitar los problemas que pueda acarrear un NULL en el alias seria mucho mas logico hacer...
Código MySQL:
Ver original p.*,
g.nombre
as generonombre
, FROM #__documentos_subgeneros AS p LEFT JOIN #__documentos_generos AS g ON g.id = p.idgenero'
Donde si tienes una condició
alias IS NOT NULL
O simplemente
IF(g.alias IS NOT NULL,CONCAT_WS(":", g.id, g.alias),g.id) as generoslug'
CONCAT_WS(":", g.id, g.alias) con comillas dobles y sin la \ tambien funcionaria