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

Ordenar por un campo y agrupar por otro pero mostrando todos los registros

Estas en el tema de Ordenar por un campo y agrupar por otro pero mostrando todos los registros en el foro de Mysql en Foros del Web. Muy buenas! Tengo una tabla donde guardo de manera muy simple todos los datos de una serie de productos. Simplificando la estructura a lo básico ...
  #1 (permalink)  
Antiguo 10/11/2018, 06:05
 
Fecha de Ingreso: abril-2006
Ubicación: De vuelta en Asturias
Mensajes: 209
Antigüedad: 12 años, 6 meses
Puntos: 1
Pregunta Ordenar por un campo y agrupar por otro pero mostrando todos los registros

Muy buenas!

Tengo una tabla donde guardo de manera muy simple todos los datos de una serie de productos.

Simplificando la estructura a lo básico sería algo así:

c_products
-------------
id
tienda
nombre producto
precio
categoría
otros datos...

La idea es guardar los precios de distintos producto en distintas tiendas y poder consultarlos para comparar. Un mismo producto, tiene un mismo id.

Por ejemplo (simplifico poniendo todos de la misma categoría):

1 - Día - Arroz SOS - 1.60 - Cereales...
2 - Día - Arroz DIA - 0.65 - Cereales...
1 - Mercadona - Arroz SOS - 1.57 - Cereales ...
3 - Mercadona - Arroz Brillante - 1.55 - Cereales...
3 - Alcampo - Arroz Brillante - 1.55 - Cereales...
1 - Alcampo - Arroz SOS - 1.52 - Cereales...

El problema que tengo es al recuperar los datos y ordenarlos por precio más barato, por ejemplo. Quiero que tenga en cuenta el precio más bajo de cada producto y a continuación muestre los que tengan el mismo id aunque sean más caros. Algo así como usar Group By, pero que se muestre cada registro. Algo así:

2 - Día - Arroz Día - 0,65 ...

1 - Alcampo - Arroz SOS - 1.52 ...
1 - Mercadona - Arroz SOS - 1.57 ...
1 - Día - Arroz SOS - 1.60 ...

3 - Mercadona - Arroz Brillante - 1.55 ...
3 - Alcampo - Arroz Brillante - 1.55 ...


Un segundo problema es al intentar mostrarlos paginados. Con la clausula limit contabiliza cada registro, y no cada id distinto.
Es decir, en el listado anterior, limit 5 mostraría hasta "3 - Mercadona", cuando en realidad sólo se están mostrando 3 productos distintos.

Los datos luego se muestran a través de PHP, pero no sé como armar la consulta para recuperarlos correctamente.
¿Alguna idea?

Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 12/11/2018, 06:06
 
Fecha de Ingreso: abril-2006
Ubicación: De vuelta en Asturias
Mensajes: 209
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Ordenar por un campo y agrupar por otro pero mostrando todos los registros

Creo que voy viendo la luz...

Tengo algo así que parece devolver los productos en el orden que quiero:

Código:
SELECT  prices.* FROM c_products INNER JOIN (SELECT DISTINCT * FROM c_products WHERE categoria = 'cereales' ORDER BY precio) prices ON prices.id = c_products.id ORDER BY c_products.precio
Lo que no consigo es dividir los registros para la paginación.
Según mi planteamiento, el LIMIT debería ponerlo en la consulta que genera la tabla "prices", es decir,
Código:
SELECT DISTINCT * FROM c_products WHERE categoria = 'cereales' ORDER BY precio LIMIT 0,5
Sin embargo cuando lo hago así no funciona correctamente. No muestra todos los precios de un id (a pesar de que haya registros después) y vuelve a mostrar varios registros de ese id en la posición donde le correspondería al precio no mostrado.

¿Un empujoncito?



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