MySQL - Problemas con una select

   
Vista:

Problemas con una select

Publicado por mendizalea (7 intervenciones) el 15/05/2013 18:28:52
Buenas tardes,

Tengo una SELECT bastante larga con varias tablas relacionadas y la SELECT incluye una funcion de MIN, luego incluye un COUNT, un WHERE para seleccionar la prueba, un GROUP BY por el Nº del participante y luego para finalizar un HAVING donde el COUNT tiene que ser igual a una variable.

Todo eso lo muestro en una tabla mediante PHP y esta todo correctamente, pero...lo que quiero hacer es que un dato en concreto de esa SELECT, la Categoria de cada participante, poder mostrarlo en una combo-box, pero que me muestre solo los que son distintos, porque ahora me muestra todos pero si hay 2 participantes con la misma categoria me muestra esa categoria 2 veces seguida.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de MySQL
- Cursos de MySQL
- Temas de MySQL
- Chat de MySQL
información
Cursos y Temas de MySQL
- Manual de MySQL
- Mysql primeros pasos
- Modelado gráfico de base de datos en MySQL
Imágen de perfil de xve

Problemas con una select

Publicado por xve (899 intervenciones) el 15/05/2013 22:49:40
Hola Medizalea, no nos muestra tu consulta, pero por lo que comentas, tienes que agrupar por la categoría para que este no te suceda.

algo así: GROUP BY categoria

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con una select

Publicado por mendizalea (7 intervenciones) el 15/05/2013 23:23:11
Muchas gracias por su respuesta. Esta seria la consulta que tengo:

1
2
3
4
SELECT *, MIN(IF(T14Tiempos.MiliSegT14=0,NULL,T14Tiempos.MiliSegT14)) as Minimo, COUNT(*) AS count
FROM T08Cate INNER JOIN (T03Vueltas INNER JOIN (T02Participantes INNER JOIN T14Tiempos ON T02Participantes.IDParticipanteT02 = T14Tiempos.IDParticipanteT14) ON T03Vueltas.IDVueltaT03 = T14Tiempos.IDVueltaT14) ON T08Cate.IDCateT08 = T02Participantes.IDCateT02
WHERE (((T14Tiempos.IDCarreraT14)=". $_SESSION['IDCarreratg'] .") AND ((T14Tiempos.TSalidaT14)<>0))
GROUP BY T14Tiempos.IDParticipanteT14 HAVING count = ". $terminados ." ORDER BY T08Cate.NombreT08 ASC


Con esto saco el listado de los participantes que han realizado X vueltas ($terminados), y me devuelve el mejor tiempo para los que han dado esas vueltas con la función MIN.

Lo que necesitaría es a partir de esa consulta poder sacar los IDCateT08, pero sin duplicarlos, porque con la consulta esta lo que saco son categorias duplicadas porque hay mas de un participante con la misma categoria.

Tambien tengo la posibilidad de llenar la combo desde la tabla que tengo todas las categorias dadas de alta...lo que pasa que en ese caso me saldrian todas, y sin duplicar...pero lo que quiero es que solo salgan las categorias de los participantes que hayan completado la X vueltas que yo le digo.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problemas con una select

Publicado por xve (899 intervenciones) el 16/05/2013 07:26:34
Hola Medizalea, la verdad es que me cuesta un poco de seguir tu consulta, ya que desconozco por completo el contenido de las tablas... pero voy a decir algo, que a lo mejor estoy equivocado y no sirve para nada, pero por si acaso, te lo comento...

Si el resultado que te devuelve tu consulta es correcto, a excepcion de que te duplica algunos registros por el campo IDCateT08, porque no haces que el resultado te lo agrupe por este campo?... algo así:

1
2
3
4
5
6
7
8
9
10
SELECT * FROM
 
(
SELECT *, MIN(IF(T14Tiempos.MiliSegT14=0,NULL,T14Tiempos.MiliSegT14)) as Minimo, COUNT(*) AS count
FROM T08Cate INNER JOIN (T03Vueltas INNER JOIN (T02Participantes INNER JOIN T14Tiempos ON T02Participantes.IDParticipanteT02 = T14Tiempos.IDParticipanteT14) ON T03Vueltas.IDVueltaT03 = T14Tiempos.IDVueltaT14) ON T08Cate.IDCateT08 = T02Participantes.IDCateT02
WHERE (((T14Tiempos.IDCarreraT14)=". $_SESSION['IDCarreratg'] .") AND ((T14Tiempos.TSalidaT14)<>0))
GROUP BY T14Tiempos.IDParticipanteT14 HAVING count = ". $terminados ." ORDER BY T08Cate.NombreT08 ASC
) s1
 
GROUP BY IDCateT08

No se si te dará el resultado que deseas... nos puedes comentar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con una select

Publicado por mendizalea (7 intervenciones) el 16/05/2013 12:27:38
Gracias por su respuesta. He probado con lo que me comentabas y no me iba, y al final lo he echo asi y ahora si que me va, lo unico tengo el problema de que no me salen ordenados por NomCate, por lo demas me muestra correctamente los datos.

1
2
3
4
5
6
7
8
9
10
11
SELECT SELECT IDCate, NomCate FROM
 
(
SELECT T08Cate.IDCateT08 AS IDCate,  T08Clase.NombreT08 AS NomCate, MIN(IF(T14Tiempos.MiliSegT14=0,NULL,T14Tiempos.MiliSegT14)) as Minimo, COUNT(*) AS count
FROM T08Cate INNER JOIN (T03Vueltas INNER JOIN (T02Participantes INNER JOIN T14Tiempos ON T02Participantes.IDParticipanteT02 = T14Tiempos.IDParticipanteT14) ON T03Vueltas.IDVueltaT03 = T14Tiempos.IDVueltaT14) ON T08Cate.IDCateT08 = T02Participantes.IDCateT02
WHERE (((T14Tiempos.IDCarreraT14)=". $_SESSION['IDCarreratg'] .") AND ((T14Tiempos.TSalidaT14)<>0))
GROUP BY T14Tiempos.IDParticipanteT14 HAVING count = ". $terminados ."
) AS Cat
 
GROUP BY IDCate
ORDER BY  NomCate ASC


Tengo algo mas puesto para que no me los ordene correctamente?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problemas con una select

Publicado por xve (899 intervenciones) el 16/05/2013 13:25:10
Hola Mendizalea, creo que no te deberia de funcionar, dos select seguidos?
SELECT SELECT ....

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con una select

Publicado por mendizalea (7 intervenciones) el 16/05/2013 16:05:40
correcto...una de ellas se me escapo al escribir en el foro, primero empeze a escribir a mano y luego sin darme cuenta hice un copy de la select teniendo escrito lo antes. A sido un error a la hora de plasmarlo en el foro lo de la SELECT doble.

Alguna solucion en cuanto al tema de ordenar los resultados?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problemas con una select

Publicado por xve (899 intervenciones) el 16/05/2013 16:54:11
Yo he realizado una simple prueba, y me ordena correctamente. Tal y como lo tienes, te debería de ordenar.

Este es el ejemplo que yo he utilizado:
1
2
3
4
select * from
    (SELECT * FROM `test`) s1
group by descripcion
order by descripcion ASC


Cual es el contenido del campo NomCate? entiendo que es texto, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con una select

Publicado por mendizalea (7 intervenciones) el 16/05/2013 17:20:25
Si es de texto...lo que pasa que NomCate no es un campo de la base de datos...sino que es una variable de la select. Puede que no me ordene por eso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar