Duda en consulta

Iniciado por Kasswed, 15 Diciembre 2009, 01:47 AM

0 Miembros y 1 Visitante están viendo este tema.

sempus


yo lo haria de esta forma, los campos se llaman distinto pero la idea se entiende

Código (sql) [Seleccionar]

SELECT count(codigo) veces, codigo FROM saldos GROUP BY codigo ORDER BY veces DESC
variable = query.veces
SELECT * from query WHERE veces = variable

si ordeno el resultado de forma descendente, se que el primer registro del cursor sera el mayor o igual, entonces lo capturo en una  variable, luego hago una segunda consulta al resultado anterior y le filtro el campo veces, de este modo, no importara cuantas veces aparecezca, me lo tomara todas, nose si me di a entender xD

en una sola consulta creo que no se puede, lo intente de varias formas :/ 
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

fede_cp

uhh, pense que era una sola tabla  :xD, jajaja

yo lo haria con una sola tabla (menos dolor de cabeza  :P).


saludos y disculpen mi error

PD:300 al fin! jajaja
somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!

^Tifa^

#12
Yo haria una vista y salgo del asunto de siempre tener que obtener el valor en una variable y luego llamarlo... sobretodo porque las variables son temporales, seguido te desconectas del motor el dato volatil se flushea.

Y estar constantemente haciendo 2 consultas (una para asignar valor a la variable otra para llamar ese valor) no lo aplicaria yo pero... para gustos.

Si quieres puedes hacer una vista que se mantendra siempre actualizada a los datos de ambas tablas, ejemplo:

Código (sql) [Seleccionar]


mysql> select usuarios.nombres, count(posts.pid) veces from usuarios inner join posts where usuarios.id = posts.id group by(usuarios.id);
+---------+-------+
| nombres | veces |
+---------+-------+
| pepe    |     6 |
| Juan    |     4 |
| Maria   |     6 |
| Luis    |     2 |
+---------+-------+
4 rows in set (0.00 sec)




Código (sql) [Seleccionar]


mysql> create view vista as select usuarios.nombres as nombre, count(posts.pid) as veces from posts inner join usuarios where usuarios.id = posts.id group by usuarios.id;

mysql> select nombre, veces from vista where veces = ( select max(veces) from vista);
+--------+-------+
| nombre | veces |
+--------+-------+
| pepe   |     6 |
| Maria  |     6 |
+--------+-------+
2 rows in set (0.01 sec)



PD: El ejemplo anterior es basado en mis tablas ejemplos puestas anteriormente.

sempus

que curioso, a mi tambien se me ocurrio lo de la vista xD ,pero la deseche porque no estara siempre actualizada por lo menos, yo para actualizar uso REQUERY( ), entonces, dije, bah, en lugar de hacer 3 consulta 1) para actualizar la vista , 2) la que necesito y 3) la subconsulta, decide hacerlo de la forma que lo postee xD, aunque como tu dices para los gustos los colores, el caso es que esta resuelto  :)
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

^Tifa^

#14
Citarque curioso, a mi tambien se me ocurrio lo de la vista xD ,pero la deseche porque no estara siempre actualizada

Recuerda corazon que la vista sencillamente es una tabla virtual no existe fisicamente, sus datos siempre reflejan lo que las tablas padres que lo componen posee. Por ende si se elimina, actualiza, inserta algun dato en un campo de la tabla padre, dicho campo tendra automaticamente la misma modificacion en la vista  ;)

Creo que con la vista creada ya es mas facil porke basaria 1 sola consulta siempre sobre la vista y asi obtendria lo que busca de manera siempre actualizada.

дٳŦ٭

 :xD andaba medio perdido pero muchas gracias Tifa por tu explicación  :)


Con sangre andaluza :)


^Tifa^

No pasa nada дٳ para eso estamos todos aqui  :D

Hay variadas maneras de el chico hacer lo que solicita, lo de la Vista es una, como tambien podria agregar 1 campo extra en la tabla usuarios que se llame por ejemplo 'veces' y que cada vez que X usuario haga un nuevo mensaje pues dicho campo 'veces' vaya creciendo de 1 en 1  ;)
Asi podria ahorrarse el costoso analisis del JOIN y consultar en base a una sola tabla 'Usuarios'.

Deben haber mas maneras de hacer lo que el pide, pero ya que estamos ofertando sugerencias.