Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Explicacion setencia Sql

Estas en el tema de Explicacion setencia Sql en el foro de Mysql en Foros del Web. Hola a todos: Esta setencia sql que esta recogiendo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT p.id AS did , p. * , g.nombre as ...
  #1 (permalink)  
Antiguo 08/10/2012, 05:53
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 13 años, 10 meses
Puntos: 2
Explicacion setencia Sql

Hola a todos:

Esta setencia sql que esta recogiendo:
Código MySQL:
Ver original
  1. SELECT p.id AS did, p.*, g.nombre as generonombre,
  2. CASE WHEN CHAR_LENGTH(p.alias) THEN CONCAT_WS(':', p.id, p.alias) ELSE p.id END as slug,
  3. CASE WHEN CHAR_LENGTH(g.alias) THEN CONCAT_WS(':', g.id, g.alias) ELSE g.id END as generoslug
  4. FROM __documentos_subgeneros AS p
  5. LEFT JOIN __documentos_generos AS g ON g.id = p.idgenero
No se el CASE WHEN CHAR_LENGTH Y el THEN CONCAT_WS

Un Saludo.

Última edición por gnzsoloyo; 08/10/2012 a las 07:51 Razón: No poster codigo de programación. Sölo SQL
  #2 (permalink)  
Antiguo 08/10/2012, 06:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 13 años, 7 meses
Puntos: 574
Respuesta: Explicacion setencia Sql

Código MySQL:
Ver original
  1. SELECT p.id AS did,
  2.              p.*,
  3.              g.nombre as generonombre,
  4.              CASE WHEN CHAR_LENGTH(p.alias)
  5.                          THEN CONCAT_WS(":", p.id, p.alias)
  6.                          ELSE p.id END as slug,
  7.               CASE WHEN CHAR_LENGTH(g.alias)
  8.                         THEN CONCAT_WS(":", g.id, g.alias)
  9.                         ELSE g.id END as generoslug
  10. FROM #__documentos_subgeneros AS p
  11.           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
  1. SELECT p.id AS did,
  2.              p.*,
  3.              g.nombre as generonombre,
  4.              CASE WHEN p.alias IS NOT NULL
  5.                          THEN CONCAT_WS(":", p.id, p.alias)
  6.                          ELSE p.id END as slug,
  7.               CASE WHEN g.alias IS NOT NULL
  8.                         THEN CONCAT_WS(":", g.id, g.alias)
  9.                         ELSE g.id END as generoslug
  10. FROM #__documentos_subgeneros AS p
  11.           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
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/10/2012 a las 06:33
  #3 (permalink)  
Antiguo 08/10/2012, 07:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 13 años, 10 meses
Puntos: 2658
Respuesta: Explicacion setencia Sql

Cuidado con el "#", que en MySQL se usa para los comentarios y no para el codigo ejecutable.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 08/10/2012, 10:40
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Explicacion setencia Sql

Hola a todos:

Muchas Gracias, muy bien explicado.

El "#__" es porque esta sacado de una instruccion de Joomla. (CMS).

Un saludo.
  #5 (permalink)  
Antiguo 09/10/2012, 18:23
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Explicacion setencia Sql

Hola a todos:

Gracias por un indicacion quimfv. Con tus indicaciones he analizado la query y no tiene mucho sentido, Si pusiera una condicion de la longitud inferior a algo, tendria sentido. Igual es lo que dices tu, evitar los NULL, siendo asi, es mucho mejor tu sql.

No sabia que en la sentencia sql se podia concatenar campos.

Algún manual de referencia de sql, donde este documentado las posibilidades del lenguaje sql.

Por otra parte, buena indicacion de echar mano a la guia de referencia de mysql.

Un saludo.
  #6 (permalink)  
Antiguo 10/10/2012, 09:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 13 años, 7 meses
Puntos: 574
Respuesta: Explicacion setencia Sql

Manual es el oficial.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 10/10/2012, 10:21
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Explicacion setencia Sql

Hola:

Hay algún enlace para formato chm.

Un saludo
  #8 (permalink)  
Antiguo 10/10/2012, 10:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 13 años, 10 meses
Puntos: 2658
Respuesta: Explicacion setencia Sql

En el mismo site, busca en "Documentation Library"

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:40.