Comunidad de diseño web y desarrollo en internet online

Resultado de consulta devuelve varios valores en una columna

Citar            
MensajeEscrito el 08 May 2020 07:45 pm
Tengo la siguiente consulta
SELECT articulo.CodEmpresa,articulo.id,articulo.Nombre,
GROUP_CONCAT(if(articulolistaprecio.CodListaPrecio=1, articulolistaprecio.precio, null)) AS `Precio1`,
GROUP_CONCAT( if(tipocodificacionarticulo.id=1, valor, null) ) AS Codigo1,
GROUP_CONCAT( if(tipocodificacionarticulo.id=2, valor, null) ) AS Codigo2,
GROUP_CONCAT( if(tipocodificacionarticulo.id=3, valor, null) ) AS Codigo3
FROM articulo
LEFT JOIN `articulolistaprecio` ON (`articulo`.`CodEmpresa` = `articulolistaprecio`.`CodEmpresa`)
AND (`articulo`.`Id` = `articulolistaprecio`.`CodArticulo`)
LEFT JOIN `articulotipocodificacionarticulo` ON (`articulo`.`Id` = `articulotipocodificacionarticulo`.`CodArticulo`)
LEFT JOIN tipocodificacionarticulo ON articulotipocodificacionarticulo.codtipocodificacionarticulo=tipocodificacionarticulo.id
WHERE articulo.codempresa=100 AND articulo.estado=1 AND
articulotipocodificacionarticulo.estado=1 AND (articulo.nombre LIKE '%YERBA%' OR articulotipocodificacionarticulo.valor LIKE '%YERBA%')
GROUP BY articulo.id, articulo.nombre
ORDER BY articulo.nombre
LIMIT 50

el resultado es

"CodEmpresa" "id" "Nombre" "Precio1" "Codigo1" "Codigo2" "Codigo3"
"100" "2835" "AMANDA YERBA CAMPO 500 GR." "0.00000,0.00000" "7792710000274" "2835"
"100" "8676" "CHEVALIER YERBA MATE EN SAQ X 20U" "0.00000,0.00000" "7791775000694" "8676"

no se ve bien formateado... pero fijense el valor 0.00000,0.00000 aparece en una única columna (precio)
¿Porque?

Por hivergor

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 May 2020 05:51 am
Basicamente porque estas concatenando dos campos, que en este caso estan vacios (o con el valor por defecto que debe ser 0,0000 .... no se por que el null,prueba quitarlo

GROUP_CONCAT(if(articulolistaprecio.CodListaPrecio=1, articulolistaprecio.precio, null))

Jorge

Por solisarg

BOFH

13640 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 09 May 2020 02:05 pm
lo planteo diferente...
09.05.2020

El problema es que articulolistaprecio.precio esta en otra tabla, y puede haber 0,1 o n precios para cada producto (depende de codlistaprecio) y cada precio distinto del mismo articulo debe mostrase en una columna distinta.
Puede que en el ejemplo que pase no haya 2 precios para un mismo producto pero lo mismo me pasaba con codigos (codigo, codigo2) en el caso de los codigos me funciono a la perfeccion...
esto es, generalizando y cambiando un poco los nombres

tabla articulos
tabla tipocodigo
tabla articulotipocodigo
tabla listaprecio
tabla articulolistaprecio

tabla codigos: CodigoBarra, codigofabrica
tabla listaprecio: preciomayorista, precio minorista

1 articulo puede tener 0, 1 ó n registros e

TABLAS BASE
tabla articulo
+---------+----------------+
| IdArt | NombreArt |
+---------+----------------+
| 1 | HARINA |
| 2 | ARROZ |
| 3 | FIDEO |
+--------------------------+

taba tipocodigo
+------------------------+
| IdCod | NombreCodigo |
+------------+-----------+
| 1 | CODIGO BARRA |
| 2 | CODIGO FABRICA |
+------------------------+

tabla listaprecio
+----------------------------+
| IdLista | NombreLista |
+----------------------------+
| 1 | PRECIO MAYORISTA |
| 2 | PRECIO MINORISTA |
+----------------------------+

tabla articulotipocodigo (relaciona un registro de tabla artículo con un registro de tabla tipocodigo)
puede haber 0,1,2 registros asociados o sea 1 producto puede no tener codigo por ej el articulo 3 no tiene ningun tipo de codigo asociado en este ejempl el articulo idart=1 tiene 2 codigos, el idart=2 1 codgio y el idart no tiene ninguno
+------------------------+
|IdArt|IdLista | codigo |
+------------+-----------+
| 1 | 1 | 000111 |
| 1 | 2 | aaabbb |
| 2 | 1 | 222333 |
+------------------------+

tabla articulolistaprecio (relaciona un registro de tabla artículo con un registro de tabla listaprecio) puede haber 0,1,2 registros asociados o sea un articulo puede tener ningun precio, precio mayorista o precio minorista o ambos..
+--------------+---------+
|IdArt|IdLista | precio |
+------------+-+---------+
| 1 | 1 | 2.30 |
| 1 | 2 | 3.40 |
| 2 | 1 | 5.60 |
+--------------+---------+

El Resultado Esperado es
+----------------------------+-----------------+-------------+---------------+
|IdArt|Articulo|PrecioMinorista|PrecioMayorista|CodigoDeBarra|CodigoDeFabrica|
+------------------------------+---------------+-------------+---------------+
| 1 | HARINA | 2.30 + 3.40 + 000111 + aaabbb |
| 2 | ARROZ | 5.60 + + 222333 + |
| 3 | FIDEO | 3.40 + + + |
+----------------------------------------------------------------------------+

Por hivergor

4 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 May 2020 01:09 pm
Cuando hay muchos precios para un producto se llama relacion de uno a muchos, si hubiera muchos codigos con muchos precios, la relacion se llama de muchos a muchos, etc

Pero volviendo a la pregunta concreta:

pero fijense el valor 0.00000,0.00000 aparece en una única columna (precio)
¿Porque?


Como te dije, concatenas precios que estan a cero, de ahi que salgan juntos y con el default (0.0000)

GROUP_CONCAT(if(articulolistaprecio.CodListaPrecio=1, articulolistaprecio.precio, null)) AS `Precio1`,


SI no quieres que eso aparezca asi, modifica el SQL (no concatenes, o agrega un where para evitar los que no tienen precio o lo tienen a cero, etc)

Jorge

Por solisarg

BOFH

13640 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 29 May 2020 01:25 pm
buen post!

Por omarlopez

0 de clabLevel



 

chrome

   Página 1 de 1

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.