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

consulta sql que me trae loco

Estas en el tema de consulta sql que me trae loco en el foro de Bases de Datos General en Foros del Web. hola, necesito ayuda con una consulta sql en teoría sencilla: Tengo la siguiente tabla que indica las preferencias de los usuarios de una página web ...
  #1 (permalink)  
Antiguo 22/07/2010, 03:06
bombadil2100
Invitado
 
Mensajes: n/a
Puntos:
consulta sql que me trae loco

hola,

necesito ayuda con una consulta sql en teoría sencilla:

Tengo la siguiente tabla que indica las preferencias de los usuarios de una página web por un producto. El producto es único (sólo hay uno por cliente) y tienen prioridad a la hora de seleccionar el producto aquellos que tengan un ranking más bajo (ningún usuario tiene el mismo ranking). Por ejemplo,

ranking--------nombre-------preferencia--------producto
1----------------Juan ------------------1------------- Camisa
2----------------María------------------1------------- Camisa
2----------------María------------------2------------- Camiseta
3----------------Lucía------------------1------------- Camisa
3----------------Lucía------------------2------------- Camiseta
3-----------------Lucía------------------3------------- Boligrafo

Necesito una consulta sql con la que pueda obtener ordenadas las preferencias de cada usuario, dando prioridad primero al ranking y luego a la preferencia.

Así, por ejemplo, en este ejemplo debería obtener:

Juan----Camisa
María---Camiseta (la camisa ya está cogida por Juan que tiene mejor ranking)
Lucía----Boligrafo (la camisa y la camiseta ya están escogidas por Juan y María que tienen mejor ranking que lucía)

Lo he programado en php, pero creo que hay una solución vía sql más sencilla, he probado un group by pero no consigo obtener el mismo resultado.

¿Alguien puede ayudarme con la consulta?
  #2 (permalink)  
Antiguo 22/07/2010, 11:14
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: consulta sql que me trae loco

Cita:
Iniciado por bombadil2100 Ver Mensaje
hola,

necesito ayuda con una consulta sql en teoría sencilla:

Tengo la siguiente tabla que indica las preferencias de los usuarios de una página web por un producto. El producto es único (sólo hay uno por cliente) y tienen prioridad a la hora de seleccionar el producto aquellos que tengan un ranking más bajo (ningún usuario tiene el mismo ranking). Por ejemplo,

ranking--------nombre-------preferencia--------producto
1----------------Juan ------------------1------------- Camisa
2----------------María------------------1------------- Camisa
2----------------María------------------2------------- Camiseta
3----------------Lucía------------------1------------- Camisa
3----------------Lucía------------------2------------- Camiseta
3-----------------Lucía------------------3------------- Boligrafo

Necesito una consulta sql con la que pueda obtener ordenadas las preferencias de cada usuario, dando prioridad primero al ranking y luego a la preferencia.

Así, por ejemplo, en este ejemplo debería obtener:

Juan----Camisa
María---Camiseta (la camisa ya está cogida por Juan que tiene mejor ranking)
Lucía----Boligrafo (la camisa y la camiseta ya están escogidas por Juan y María que tienen mejor ranking que lucía)

Lo he programado en php, pero creo que hay una solución vía sql más sencilla, he probado un group by pero no consigo obtener el mismo resultado.

¿Alguien puede ayudarme con la consulta?
haber seria:
Código SQL:
Ver original
  1. SELECT *
  2. FROM ejm
  3. GROUP BY (pro)
  4. ORDER BY(id);

prueba asi , aunq no toy seguro
  #3 (permalink)  
Antiguo 24/07/2010, 02:03
bombadil2100
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: consulta sql que me trae loco

gracias por la respuesta pero en realidad así estás ordenando el group by y lo que se necesitaría es una ordenación previa.
  #4 (permalink)  
Antiguo 24/07/2010, 05:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta sql que me trae loco

Código MySQL:
Ver original
  1. SELECT t1.ranking, t1.nombre, t1.preferencia, t1.producto FROM
  2.  (SELECT ranking, nombre, preferencia, producto FROM `tutabla`
  3.  ORDER BY ranking, nombre, preferencia)t1
  4.  GROUP BY t1.producto  ORDER BY t1.ranking

Última edición por jurena; 27/07/2010 a las 08:00
  #5 (permalink)  
Antiguo 27/07/2010, 05:07
bombadil2100
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: consulta sql que me trae loco

hola jurena,

perdona que tarde tanto en responder. Incluir una subconsulta es una solución ingeniosa. Pero fíjate que el resultado de esa consulta sería:

ranking---nombre---preferencia------producto
1------------Juan----------1--------------camisa
2------------María---------1--------------camisa
3------------Lucía----------1--------------camisa

Y el producto debe ser UNICO (un producto distinto para cada usuario; si hay 3 usuarios hay 3 productos uno para cada uno).

Empiezo a dudar de que se pueda hacer con una consulta

El resultado de la consulta debería ser:

ranking--------nombre-------preferencia--------producto
1----------------Juan ------------------1------------- Camisa
2----------------María------------------2------------- Camiseta
3-----------------Lucía------------------3------------- Boligrafo

Última edición por bombadil2100; 27/07/2010 a las 05:22
  #6 (permalink)  
Antiguo 27/07/2010, 06:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta sql que me trae loco

A mí me salía como dices que debe salir. Voy a comprobar.
Edito: Funciona perfectamente. Cosa distinta es que la estructura de tus tablas no se acomode a la que probé yo. Habría que adaptarla. Yo he usado una tabla con los campos ranking, nombre, preferencia y producto, tal y como lo has escrito tú, y, créeme, esta consulta funciona.
Código MySQL:
Ver original
  1. SELECT t1.ranking, t1.nombre, t1.preferencia, t1.producto FROM
  2.  (SELECT ranking, nombre, preferencia, producto FROM `tutabla`
  3.  ORDER BY ranking, nombre, preferencia)t1
  4.  GROUP BY t1.producto  ORDER BY t1.ranking
El resultado es este:
ranking--------nombre-------preferencia--------producto
1----------------Juan ------------------1------------- Camisa
2----------------María------------------2------------- Camiseta
3-----------------Lucía------------------3------------- Boligrafo

Última edición por jurena; 27/07/2010 a las 08:00
  #7 (permalink)  
Antiguo 27/07/2010, 08:12
bombadil2100
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: consulta sql que me trae loco

Sí tienes razón, funciona bien pero sigue sin servirme (no me he explicado muy bien ). Verás el tema es que quiero que los usuarios vayan viendo en tiempo real (a medida que se vaya anotando cada uno lo que se les va asignando). Me explico:

Si tengo una tabla como esta (con 5 productos y de momento 4 usuarios que han escogido sus preferencias):

1-----Juan ------1-----Camisa
2-----María------1-----Camisa
2-----María------2-----Camiseta
3-----Lucía------1-----Camisa
3-----Lucía------2-----Bolígrafo
3-----Lucía------3-----chapa
4-----Maite------2---- Camisa
4-----Maite------1---- Bolígrafo
4-----Maite------3---- chapa
4-----Maite------4-----Reloj

Necesitaría obtener:

1---Juan----1----Camisa
2---María---2-----Camiseta
3---Lucía---2-----Boligrafo
4---Maite---3-----chapa

Y con tu consulta me devolvería:

1-----Juan------1----- Camisa
2-----María----- 2-----Camiseta
3---- Lucía----- 3---- chapa
3---- Lucía----- 2---- Bolígrafo
4---- Maite----- 4---- Reloj

Entonces tu solución funcionaría pero solo en caso de que tenga tantos productos como usuarios anotados en cada momento.
  #8 (permalink)  
Antiguo 27/07/2010, 09:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta sql que me trae loco

Llevas razón, no funciona para lo que quieres, pues si una persona hace más de una elección que otro no haya hecho se le asignan todas. Habrá que buscar una solución. Naturalmente, la consulta interior puede ayudarte para el archivo PHP, pero hacerlo con base de datos habrá que elaborar más la consulta... Seguiremos en ello.

Etiquetas: loco, 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 02:19.