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

Ayuda con MySql - Where Min

Estas en el tema de Ayuda con MySql - Where Min en el foro de Mysql en Foros del Web. Cita: SELECT min(t.pos) as m , t.pos, l.id, l.shortaddress, l.price, t.title, t.src, t.thumb, t.type, l.caption, l.msl, r.state FROM realtorlisting r, listing l, tours t WHERE ...
  #1 (permalink)  
Antiguo 18/12/2006, 14:20
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 5 meses
Puntos: 4
Ayuda con MySql - Where Min

Cita:

SELECT
min(t.pos) as m ,
t.pos,
l.id,
l.shortaddress,
l.price,
t.title,
t.src,
t.thumb,
t.type,
l.caption,
l.msl,
r.state
FROM
realtorlisting r,
listing l,
tours t
WHERE
l.id =r.id_listing AND
l.id=t.id_listing AND
r.id_reltor=$valor AND
l.status=0

GROUP BY t.id_listing
ORDER BY t.id_listing desc
Esa es la consulta que estoy realizando, el problema que tengo es que necesito agregar una clausula en el Where que sea algo así como
"Seleccionar desde la tabla tours, la fila donde pos es el valor menor"

El problema que tengo es que cuando hago el group by hay varios valores agrupados de pos y no se como puedo seleccionar el valor menor para obtener esa fila completa.

me imagino que no debe ser complicado pero no encuentro como

min(t.pos) as m ,
t.pos,

estos los puse para hacer otros tipos de consulta

Saludos y gracias
  #2 (permalink)  
Antiguo 19/12/2006, 02:04
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Re: Ayuda con MySql - Where Min

Prueba con una subconsulta en el where algo como esto

Código:
SELECT
min(t.pos) as m ,
t.pos,
l.id,
l.shortaddress,
l.price,
t.title,
t.src,
t.thumb,
t.type,
l.caption,
l.msl,
r.state
FROM
realtorlisting r,
listing l,
tours t
WHERE
l.id =r.id_listing AND
l.id=t.id_listing AND
r.id_reltor=$valor AND
l.status=0 AND 
campo_en_cuestion = (SELECT MIN(pos) FROM tours)

GROUP BY t.id_listing
ORDER BY t.id_listing desc
Un saludo
__________________
Una vez un elemental de rayos mató una tribu entera de tritones.

¡¡ El sólo quería darse un baño !!

http://www.frikilandia.com

Neither Fu Nor Fa
  #3 (permalink)  
Antiguo 19/12/2006, 07:25
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Ayuda con MySql - Where Min

Gracias por tu ayuda pero eso no sirve ya que tengo ningun valor aislado de tours como para hacer la subconsulta.

Todavia sigo con el problema pero luego de un analisis mañanero puedo dilucidar donde ocurre el problema

El problema es que el group by esta seleccionando en forma aleatoria y yo no se como condicionarlo.

un ejemplo simple del mismo problema:

Tengo un colegio con x cantidad de cursos y cada curso tiene x cantidad de alumnos, lo que yo quiero es selecionar el que tiene la peor nota.

la tabla seria bien basico algo asi

id, id_curso, id_alumno, nombre, nota


la consulta tendria que ser asi, pero me falta definir el minimo

SELECT
id,
id_curso,
id_alumno,
nombre,
nota

FROM
colegio
Group by id_curso


como lo condiciono para que me muestre la fila de menor nota, sin sacar el Group by id_curso
  #4 (permalink)  
Antiguo 19/12/2006, 08:18
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Re: Ayuda con MySql - Where Min

Si lo que quieres es la nota mínima de todos (el bota de oro que llamabamos en mi instituto) sería esta consulta

Código:
SELECT
id,
id_curso,
id_alumno,
nombre,
nota

where 

nota = (SELECT MIN(nota) FROM colegio)

FROM
colegio
Group by id_curso
Pero si lo que quieres es el bota de oro de cada clase sería así

Código:
SELECT
id,
id_curso,
id_alumno,
nombre,
nota

FROM
colegio
Group by id_curso

HAVING

nota = MIN(nota)
La cosa está en que la subconsulta se hace a la misma tabla no necesitas más tablas.

Espero que te valga. Un saludo
__________________
Una vez un elemental de rayos mató una tribu entera de tritones.

¡¡ El sólo quería darse un baño !!

http://www.frikilandia.com

Neither Fu Nor Fa
  #5 (permalink)  
Antiguo 19/12/2006, 09:10
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Ayuda con MySql - Where Min

Cita:
Iniciado por Lord of freaks Ver Mensaje
Pero si lo que quieres es el bota de oro de cada clase sería así

Código:
SELECT
id,
id_curso,
id_alumno,
nombre,
nota

FROM
colegio
Group by id_curso

HAVING

nota = MIN(nota)
La cosa está en que la subconsulta se hace a la misma tabla no necesitas más tablas.

Espero que te valga. Un saludo
justamente eso es lo mas cercano a lo que quiero

probe con el having nota = MIN(nota)
pero lo que hace es dejar solo los registros que son correctos, es decir sin el having por ejemplo tengo 7 cursos con notas al azar, pero con en having solo quedan las que conciden que podrian ser todas o ninguna.

En la pagina de mysql enconter esto:
No use esta característica si las columnas que omite de la parte GROUP BY no son únicos en el grupo! Obtendría resultados impredecibles.

Por esto descarto de que se pueda hacer con el group by, asi que estoy buscando otra forma, igual podria realizar una subconsulta pero el problema que tengo es que tendria que ser dinamica con valores distintos para cada caso, como por ejemplo para cada curso.
  #6 (permalink)  
Antiguo 19/12/2006, 11:13
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Re: Ayuda con MySql - Where Min

A lo mejor no funciona pero y si prueba con esto así los resultados son únicos

Código:
SELECT
id,
id_curso,
id_alumno,
nombre,
nota

FROM
colegio
Group by id_curso

HAVING

nota = MIN(DISTINCT nota)
Un saludo
__________________
Una vez un elemental de rayos mató una tribu entera de tritones.

¡¡ El sólo quería darse un baño !!

http://www.frikilandia.com

Neither Fu Nor Fa
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 00:53.