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

Selección compleja en una tabla

Estas en el tema de Selección compleja en una tabla en el foro de Bases de Datos General en Foros del Web. Hola, k tal? Lo que quiero conseguir es scceder a una tabla seleccionando los registros donde el campo 'tema' sea igual a 3, 4 y ...
  #1 (permalink)  
Antiguo 19/03/2005, 04:36
 
Fecha de Ingreso: noviembre-2004
Mensajes: 6
Antigüedad: 19 años, 6 meses
Puntos: 0
Exclamación Selección compleja en una tabla

Hola, k tal? Lo que quiero conseguir es scceder a una tabla seleccionando los registros donde el campo 'tema' sea igual a 3, 4 y 5, y que los registros resultantes me aparezcan de forma aleatoria, vale, esto lo he conseguido-->("SELECT * FROM cuestiones_teoria WHERE tema='3' OR tema='4' OR tema='5' ORDER BY RAND()"). Pero realmente lo que quiero es seleccionar sólo cuatro registros de cada tema y que el resultado sea devuelto aleatoriamente.

NOTA:
No quiero esto-->("SELECT * FROM cuestiones_teoria WHERE tema='3' OR tema='4' OR tema='5' ORDER BY RAND() LIMIT 4"). Con esta sentencia sólo son devueltos cuatro registros, pero lo que quiero que sean devueltos cuatros de cado tema.
ESPERO QUE ENTENDÁIS LO QUE QUIERO HACER.
GRACIAS.
  #2 (permalink)  
Antiguo 21/03/2005, 05:03
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
La única forma de obtener 4 de cada tema es hacíendolo por separado. Mientras lo hagas en conjunto se trata el resultado como un todo uno podrás hacer lo que quieres.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 21/03/2005, 05:38
 
Fecha de Ingreso: noviembre-2004
Mensajes: 6
Antigüedad: 19 años, 6 meses
Puntos: 0
Gracias Vice por contestar. Ya he encontrado la forma ==>mysql_query(" (SELECT * FROM cuestiones_teoria WHERE Tema='3' ORDER BY RAND() LIMIT 4) UNION (SELECT * FROM cuestiones_teoria WHERE Tema='4' ORDER BY RAND() LIMIT 4) UNION (SELECT * FROM cuestiones_teoria WHERE Tema='5' ORDER BY RAND() LIMIT 4) ").

UN SALUDO.
  #4 (permalink)  
Antiguo 22/03/2005, 06:53
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Eso es lo primero que pensé, pero no te hace un orden aleatorio completo, sino que te ordena aleatoriamente las cuatro que seleccionas de cada tema. Si te vale con ese orden , pues adelante.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #5 (permalink)  
Antiguo 22/03/2005, 07:33
 
Fecha de Ingreso: noviembre-2004
Mensajes: 6
Antigüedad: 19 años, 6 meses
Puntos: 0
Ya, pero es que lo no quiero es que me coga siempre las misma 4 cuestiones de cada tema. Tengo 15 registros para cada tema y quiero que coga 4 al azar de cada tema cada vez que ejecuto la orden. Además lo he modificado para que las 12 cuestiones que en total me selecciona me las mezcle tb ==>

mysql_query(" SELECT (SELECT * FROM cuestiones_teoria WHERE Tema='3' ORDER BY RAND() LIMIT 4) UNION (SELECT * FROM cuestiones_teoria WHERE Tema='4' ORDER BY RAND() LIMIT 4) UNION (SELECT * FROM cuestiones_teoria WHERE Tema='5' ORDER BY RAND() LIMIT 4) ORDER BY RAND() ").

Creo que con esta sentencia es lo que consigo, si no es así por favor hazmelo saber.
Espero tu respuesta. Gracias.
  #6 (permalink)  
Antiguo 22/03/2005, 09:59
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Si te funciona no le daría más vueltas.
El caso es que según el manual de mysql el "order by" sólo se pone al final, con lo que no sería posible hacerlo, pero si te lo admite supongo que funcionará correctamente.
Un saludo.
__________________
Estoy contagiado de Generación-I
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 19:51.