elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  WHERE id IN subquery...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: WHERE id IN subquery...  (Leído 3,858 veces)
XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
WHERE id IN subquery...
« en: 20 Julio 2011, 19:16 »

Hola, estoy intentado hacer lo siguiente:

Código
  1. UPDATE dxgm_statspos
  2.   SET total_pos = r.pos
  3.       WHERE id IN (SELECT @rownum := @rownum +1 'pos', id
  4.                        FROM dxgm_users, (SELECT @rownum :=0)r
  5.                        ORDER BY total_points DESC)
  6.           AND dxgm_statspos.TYPE = 0

Más o menos lo que yo quiero que haga es que me ordene la tabla users por total_points y con eso me saque la posicion de cada usuario según ese orden. Esa posicion se guarda en pos. Hasta aquí funciona. Luego intento poner esa "pos" en la tabla statspos en aquella fila que tiene id igual al id de la tabla users y type=0...y ahí ya me da error porque en el IN no puedo meter varias columnas.

La verdad, llevo ya un rato dándole vueltas y me he quedado atrancado en ello, no avanzo más...¿se os ocurre alguna manera de corregirla o alguna manera diferente o más sencilla de hacerla?

Gracias!



« Última modificación: 20 Julio 2011, 19:20 por XafiloX » En línea

l337*


Desconectado Desconectado

Mensajes: 1.008


I've been thinking...


Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #1 en: 20 Julio 2011, 19:49 »

Hola, estoy intentado hacer lo siguiente:

Código
  1. UPDATE dxgm_statspos
  2.   SET total_pos = r.pos
  3.       WHERE id IN (SELECT @rownum := @rownum +1 'pos', id
  4.                        FROM dxgm_users, (SELECT @rownum :=0)r
  5.                        ORDER BY total_points DESC)
  6.           AND dxgm_statspos.TYPE = 0

Más o menos lo que yo quiero que haga es que me ordene la tabla users por total_points y con eso me saque la posicion de cada usuario según ese orden. Esa posicion se guarda en pos. Hasta aquí funciona. Luego intento poner esa "pos" en la tabla statspos en aquella fila que tiene id igual al id de la tabla users y type=0...y ahí ya me da error porque en el IN no puedo meter varias columnas.

La verdad, llevo ya un rato dándole vueltas y me he quedado atrancado en ello, no avanzo más...¿se os ocurre alguna manera de corregirla o alguna manera diferente o más sencilla de hacerla?

Gracias!



que tal...
 
Código
  1. UPDATE dxgm_statspos /* poner esa "pos" en la tabla statspos */
  2. SET total_pos = r.pos   /* poner esa "pos" en la tabla statspos */
  3. WHERE id IN (SELECT id FROM dxgm_users) /*en aquella fila que tiene id igual al id de la tabla users*/
  4.           AND dxgm_statspos.TYPE = 0 /*y type=0 */
  5.  

?


En línea

XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #2 en: 20 Julio 2011, 19:55 »

Pero con eso no haces lo que yo quiero...lo que yo quiero es calcular el la posicion de cada usuario por el orden descendente de puntos totales y luego poner esa posicion en la tabla statspos a la fila con el mismo id que el usuario...


Toda la parte que calcula la posicion está bien:
Código
  1. SELECT @rownum := @rownum +1 'pos', id
  2.                        FROM dxgm_users, (SELECT @rownum :=0)r
  3.                        ORDER BY total_points DESC
  4.  

En lo que ya me falla es cuando quiero poner esa posicion en la otra tabla, que al usar IN, como le estoy pasando un resultado con varias columnas me da error...
En línea

l337*


Desconectado Desconectado

Mensajes: 1.008


I've been thinking...


Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #3 en: 20 Julio 2011, 20:01 »

nativamente en sql o con ayuda de algun lenguaje?
En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.704


WOS & Khan & Calero LDN


Ver Perfil WWW
Re: WHERE id IN subquery...
« Respuesta #4 en: 21 Julio 2011, 06:34 »

En que sección pregunto? ¬¬!
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #5 en: 21 Julio 2011, 12:00 »

nativamente en sql o con ayuda de algun lenguaje?
En sql...con php podría hacerlo con un bucle con querys, pero me gustaría hacerlo en sql para que vaya más rápido...lo que no sé es si estoy intentado hacer algo que es imposible  :-\
En línea

l337*


Desconectado Desconectado

Mensajes: 1.008


I've been thinking...


Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #6 en: 21 Julio 2011, 15:11 »

En que sección pregunto? ¬¬!

No sé, ¿¿En qué sección preguntas qué??...



En sql...con php podría hacerlo con un bucle con querys, pero me gustaría hacerlo en sql para que vaya más rápido...lo que no sé es si estoy intentado hacer algo que es imposible  :-\

yo diría que con un procedure o ayuda de tablas temporales después de guardar la posición en pos... una muy vaga idea pero al menos es un inicio :p  ¿cómo es la estructura de las tablas que usas?
En línea

XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #7 en: 21 Julio 2011, 20:02 »

Pues simplificando y quitando todo lo que no está relacionado la estructura sería algo como

tabla users
idtotal_points
1700
2500
31000

Entonces la query debería rellenar la tabla statspos así (teniendo que se ordena de forma descendente de puntos):

idtypetotal_pos
102
203
301

Respecto a lo del procedure, no estoy muy familiarizado con ellos, pero...no se borran cada vez que reinicias mysql?
En línea

fran800m

Desconectado Desconectado

Mensajes: 204



Ver Perfil
Re: WHERE id IN subquery...
« Respuesta #8 en: 17 Septiembre 2011, 01:42 »

Los updates te permiten indicar 2 tablas, relacionarlas y cambiar las 2 al mismo tiempo o en tu caso 1 sola, la que te interesa.

Prueba a hacerlo no como subconsulta, sino usando la subquery como tabla auxiliar, así podrás tener de la subquery los campos que necesites.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines