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

duda para hacer una consulta sql en mysql

Estas en el tema de duda para hacer una consulta sql en mysql en el foro de Mysql en Foros del Web. suponiendo una tabla algo como esto: id nombre fecha_renovacion fecha_renovacion2 partiendo de estos campos quiero mostrar en pantalla todos los registros que fecha renovacion2 y ...
  #1 (permalink)  
Antiguo 23/10/2013, 14:10
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
duda para hacer una consulta sql en mysql

suponiendo una tabla algo como esto:

id

nombre

fecha_renovacion

fecha_renovacion2


partiendo de estos campos quiero mostrar en pantalla todos los registros que fecha renovacion2 y fecha renovacion sea superior a la actual y mostrarlos de forma aleatoria en pantalla y seguido mostrar 50 registros donde fecha renovacion es superior a la fecha actual pero fecha renovacion2 no lo es para que no se repitan registros.

a mi solo se me ocurre con dos consultas la primera seria mostrar los registros con esas condiciones de forma aleatoria con rand por ejemplo y luego mostrar la otra consulta con sus condiciones.

pero mi pregunta es si puedo hacer esto de una sola consulta?

saludos.
  #2 (permalink)  
Antiguo 24/10/2013, 01:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: duda para hacer una consulta sql en mysql

usa UNION si quieres hacerlo con una sola consulta
http://dev.mysql.com/doc/refman/5.0/es/union.html
  #3 (permalink)  
Antiguo 24/10/2013, 03:20
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

Hola jurena me lei lo la parte de union pero no consigo hacer funcionar que el primer select me muestre los registros aleatoriamente, probe asin:

Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM usuarios
  3. WHERE renovacion > current_timestamp( )
  4. AND renovacion2 > current_timestamp( )
  5. ORDER BY id,nombre RAND()
  6. )
  7.  
  8. SELECT id,nombre
  9. FROM usuarios
  10. WHERE renovacion> current_timestamp( )
  11. ORDER BY id, nombre ASC
  12. )

el error esta en el rand no se si no se puedo aplicar en consultas de union o simplemente la sintaxis esta mal, espero me ayuden.
saludos.
  #4 (permalink)  
Antiguo 24/10/2013, 06:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda para hacer una consulta sql en mysql

No puedes usar el RAND de esa forma. O lo pones solo, o es un parámetro más del ORDER BY, pero no es un modificador de la columnas indicadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/10/2013, 07:21
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No puedes usar el RAND de esa forma. O lo pones solo, o es un parámetro más del ORDER BY, pero no es un modificador de la columnas indicadas.
gracias por tu colaboracion gnzsoloyo, a que te refieres con ponerlo solo no lo acabo de entender me puedes poner un ejemplo?

saludos.
  #6 (permalink)  
Antiguo 24/10/2013, 07:31
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

probe asin:

Código MySQL:
Ver original
  1. SELECT id,nombre
  2.     FROM usuarios
  3.     WHERE renovacion > CURRENT_TIMESTAMP( )
  4.     AND renovacion2 > CURRENT_TIMESTAMP( )
  5.     ORDER BY  RAND()
  6.     )
  7.     UNION (
  8.      
  9.     SELECT id,nombre
  10.     FROM usuarios
  11.     WHERE renovacion> CURRENT_TIMESTAMP( )
  12.     ORDER BY id, nombre ASC
  13.     LIMIT 20
  14.     )

no me da ningun error pero no me funciona, a eso te referias con que no puede modificar filas?
lo que no entiendo como tengo que ponerlo solo para funcione
  #7 (permalink)  
Antiguo 24/10/2013, 07:46
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

tambien probe asin:

Código MySQL:
Ver original
  1.  
  2.      (SELECT id,nombre
  3.         FROM usuarios
  4.         WHERE renovacion > CURRENT_TIMESTAMP( )
  5.         AND renovacion2 > CURRENT_TIMESTAMP( )
  6.         ORDER BY  RAND()
  7.         )
  8.         UNION (
  9.          
  10.         SELECT id,nombre
  11.         FROM usuarios
  12.         WHERE renovacion> CURRENT_TIMESTAMP( )
  13.         ORDER BY id, nombre ASC
  14.         LIMIT 20
  15.         )
  16. )usuarios)

pero me muestra lo mismo no me muestra el listado de la primera selecion de forma aleatoria
  #8 (permalink)  
Antiguo 24/10/2013, 08:01
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

tambien probe asin pero nada

Código MySQL:
Ver original
  1.        (SELECT * FROM(
  2.      
  3.          (SELECT id,nombre
  4.             FROM usuarios
  5.             WHERE renovacion > CURRENT_TIMESTAMP( )
  6.             AND renovacion2 > CURRENT_TIMESTAMP( )
  7.             ORDER BY id,nombre ASC
  8.             )
  9.           )AS nueva
  10.             ORDER BY RAND()
  11.          )
  12.             UNION (
  13.              
  14.             SELECT id,nombre
  15.             FROM usuarios
  16.             WHERE renovacion> CURRENT_TIMESTAMP( )
  17.             ORDER BY id, nombre ASC
  18.             LIMIT 20
  19.             )
  20.     )usuarios)
tampoco me crea la primera selecion de forma aleatoria.
  #9 (permalink)  
Antiguo 24/10/2013, 08:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda para hacer una consulta sql en mysql

Cita:
pero me muestra lo mismo no me muestra el listado de la primera selecion de forma aleatoria
Bueno, eso es precisamente lo que hace el RAND()..., pero para que te lo respete debes poner si o si UNION ALL.
Pregunta: ¿Qué es lo que se supone que quieres obtener al usarlo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 24/10/2013, 08:08
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

lo que pretendo obtener es que los registros de la primera selecion en este caso serian solo 3 me los muestre de forma aleatoria y seguido de estos tres me muestre me muestre los otros 20 registros de forma ascendente.

segun lei al poner ALL no tiene en cuenta si se repiten los registros los muestra todo, y esto no quiero, realmente los registros que muestro con el primer select de forma aleatoria estan o pueden estar repetetidos en el segundo select y no quiero que en este segundo los muestre, no se si me explique con lo que intento que haga la consulta.

saludos
  #11 (permalink)  
Antiguo 24/10/2013, 08:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: duda para hacer una consulta sql en mysql

Genial, pero si te fijas, las condiciones de una de las queries incluyen la de la otra, por lo que para que te funcione, la segunda debe excluir a los que pueden estar en la primera.
En otras palabras, a tu consulta le faltan condiciones:
Código MySQL:
Ver original
  1.      (SELECT id, nombre
  2.         FROM usuarios
  3.         WHERE renovacion > CURRENT_TIMESTAMP()
  4.         AND renovacion2 > CURRENT_TIMESTAMP()
  5.         ORDER BY  RAND()
  6.         )
  7.         UNION
  8.         (SELECT id, nombre
  9.         FROM usuarios
  10.         WHERE renovacion> CURRENT_TIMESTAMP()
  11.             AND renovacion2 <= CURRENT_TIMESTAMP()
  12.         ORDER BY id, nombre ASC
  13.         LIMIT 20
  14.         ))usuarios
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 24/10/2013, 09:11
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: duda para hacer una consulta sql en mysql

Perfecto no habia caido en algo tan facil añadir el condicional a la inversa jejeje, bueno entiendo que ahora funciona pero claro resulta que los registros que tengo mostrar aleatoriamente solo tengo dos llame a la consulta como 10 veces y ninguna de las veces me los cambio como si no funcionara el rand(), esto a que es debido acabaria funcionando o es solo casualidad que no muestre el rand.

Realmente la consulta si que funciona porque como si que tengo mas registros que no cumplen esta condicion lo cambie y en cambio ahi si que vi que si funciona el rand(), solo esa curiosidad que si salen dos registros el rand parece que no funcione.

Bueno igual este tema ya esta solucionado funciona perfecto, muchas gracias gnzsoloyo por tu ayuda.

Saludos.

Etiquetas: campo, registros, sql, tabla
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 10:37.