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

[SOLUCIONADO] Busqueda con order by

Estas en el tema de Busqueda con order by en el foro de Mysql en Foros del Web. Buenas noches, tengo un problema a la hora de ordenar unos eventos, seguro que es una tonteria que hago mal pero estoy muy atascado. Explico: ...
  #1 (permalink)  
Antiguo 26/02/2013, 19:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 14 años, 6 meses
Puntos: 0
Busqueda con order by

Buenas noches, tengo un problema a la hora de ordenar unos eventos, seguro que es una tonteria que hago mal pero estoy muy atascado. Explico:

Tengo 3 tablas, eventos, organizadores y sitios.

Lo que quiero es sacar 9 eventos próximos, lo cual ya hago, pero mi problema viene, cuando quiero ordenarlos tambien por un campo de las otras tablas que es or_verificado y si_verificado, estos campos son de valor 0 o 1.

Lo que yo quiero hacer es sacar los 9 próximos eventos que tenga, pero con prioridad los q tienen un 1 en si_verificado o or_verificado.

Código MySQL:
Ver original
  1. SELECT DISTINCT eventos.ev_id
  2. FROM eventos,organizadores,sitios
  3. WHERE eventos.ev_activo =1
  4. AND eventos.ev_fecha >= ( CURRENT_DATE( ) )
  5. AND eventos.ev_tipo =0
  6. ORDER BY eventos.ev_fecha ASC, organizadores.or_verificado DESC , sitios.si_verificado DESC
  7. LIMIT 0 , 9

Un saludo y gracias por la ayuda!
  #2 (permalink)  
Antiguo 27/02/2013, 08:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Busqueda con order by

eventos,organizadores,sitios

No veo como puedes hacer una relacion sin especificar con que campos entre tablas con un significado como el que se intuye...

Deberias usa la sintanxis JOIN ON para asegurarnos de que las tablas se relacionan bien...

Cita:
...pero con prioridad los q tienen un 1 en si_verificado o or_verificado ...
Eso quiere decir que deben estar verificados....no se acaba de entender...

agrega una restriccion y solo veras registros totalmente verificados...

Código MySQL:
Ver original
  1. WHERE eventos.ev_activo =1
  2. AND eventos.ev_fecha >= ( CURRENT_DATE( ) )
  3. AND eventos.ev_tipo =0
  4. AND (organizadores.or_verificado=true OR sitios.si_verificado=true)
  5. ORDER BY eventos.ev_fecha ASC
  6. LIMIT 0 , 9

o

Código MySQL:
Ver original
  1. WHERE eventos.ev_activo =1
  2. AND eventos.ev_fecha >= ( CURRENT_DATE( ) )
  3. AND eventos.ev_tipo =0
  4. AND organizadores.or_verificado=true
  5. AND sitios.si_verificado=true
  6. ORDER BY eventos.ev_fecha ASC
  7. LIMIT 0 , 9
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 27/02/2013 a las 08:42
  #3 (permalink)  
Antiguo 27/02/2013, 09:31
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Busqueda con order by

Buenas quimfv, gracias por responder, pero me temo que esto no es lo que busco, para que me puedas ayudar que necesitas que te diga? he estado pensando más en el código pero no veo la manera de hacerlo.

eventos

ev_id int(11)
ev_sitio int(11)
ev_organizador int(11)
ev_nombre varchar(255)
ev_fecha date
ev_activo int(11)

sitios

si_id int(11)
si_verificado int(11)

organizadores

or_id int(11)
or_verificado int(11)


Ejemplos de registros de eventos:

Eventos
ev_id = 361
ev_sitio = 1
ev_organizador = 11
ev_nombre = GOMAD! & MONSTER
ev_fecha = 2013-03-15
ev_activo = 1

ev_id = 367
ev_sitio = 4
ev_organizador = 0
ev_nombre = Moore MK
ev_fecha = 2013-03-15
ev_activo = 1

Sitios
si_id = 1
si_verificado = 1

si_id = 4
si_verificado = 0

Organizadores
or_id = 11
or_verificado = 0

Aquí está toda la información. Lo que quiero hacer es sacar los 9 próximos eventos (ordenados por fecha), pero con prioridad los q tienen un 1 en sitios.si_verificado y si es un 0 luego por organizadores.or_verificado

A ver si ahora se me entiende mejor... Si sabes como hacerlo da igual lo complicado que sea que me servirá :D

Un saludo
  #4 (permalink)  
Antiguo 27/02/2013, 11:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Busqueda con order by

Código MySQL:
Ver original
  1. SELECT DISTINCT eventos.ev_id
  2. FROM (eventos  INNER JOIN organizadores ON eventos.ev_organizador=organizadores.or_id)
  3.             INNER JOIN sitios ON eventos.ev_sitio=sitios.si_id
  4. WHERE eventos.ev_activo =1
  5. AND eventos.ev_fecha >= ( CURRENT_DATE( ) )
  6. AND eventos.ev_tipo =0
  7. ORDER BY eventos.ev_fecha ASC, organizadores.or_verificado DESC , sitios.si_verificado DESC
  8. LIMIT 0 , 9

Así debería funcionar....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 27/02/2013, 15:45
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Busqueda con order by

He probado lo que me has contestado, es algo que probé en su dia, y me saca solo dos registros. Pensando porque puede ser, me ha venido a la cabeza que esto pasará por que hay eventos que el organizador es = 0, por lo que el inner join con organizadores no encuentra nada ya que no hay ningùn registro como ese.

Sabrias como solucionar este problema?

Muchas gracias por tu esfuerzo!
  #6 (permalink)  
Antiguo 27/02/2013, 16:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Busqueda con order by

Cambia inner por left....

Detecto algun defecto de diseño... Date uma vuelta por algun tutorial del modelo relacional.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 27/02/2013, 17:02
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Busqueda con order by

muchas gracias figura, esto es lo que queria, ya miraré como mejorar la base de datos, de momento voy tirando con lo que se.

Gracias de nuevo!

Etiquetas: select, tablas
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 04:08.