Foros del Web » Programando para Internet » PHP »

2 preguntas: ORDER BY y MAX

Estas en el tema de 2 preguntas: ORDER BY y MAX en el foro de PHP en Foros del Web. 2 preguntas: ORDER BY y MAX Bueno, la primer duda es esta: Estoy haciendo un query para traer registros de usuarios haciendo un WHERE id=2 ...
  #1 (permalink)  
Antiguo 01/12/2002, 00:30
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
2 preguntas: ORDER BY y MAX

2 preguntas: ORDER BY y MAX

Bueno, la primer duda es esta:
Estoy haciendo un query para traer registros de usuarios haciendo un

WHERE id=2 OR id=10 OR id=1

El problema es que aunque no especifique el ORDER BY me aparecen ordenados por id, y lo que realmente necesito es que aparezcan ordenados (mezclados) segun el orden del WHERE, se puede hacer?


La otra duda es sobre MAX()
HAsta ahora, cuando queria extraer los datos de un registro cuya edad fuese la maxima de la tabla, hacia un

SELECT MAX(edad) AS max...

Y luego hacia un query usando ese valor

SELECT... WHERE edad=max

Me pregunto, no se puede hacer de un solo paso? Lo he intentado, pero me da error. Lo unico que se me ocurrio hacer fue esto:

SELECt... WHERE edad=MAX(edad)

Pero no anda, si se puede, como deberia ser?
  #2 (permalink)  
Antiguo 01/12/2002, 04:36
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
SELECT MAX(edad) FROM tabla

Te devuelve un sólo resultado, aquel que tenga la mayor edad.


Con Access, puedes hacer:

SELECT * FROM tabla ORDER BY id=3,id=2,id=5

Pero MySQL no lo permite
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 01/12/2002, 10:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En Mysql si usas alias ..para usarlos en la misma sentencia SQL para un condicional hay q usar HAVING en vez de WHERE:

Uso de alias (con el HAVING):
http://www.mysql.com/doc/en/Problems_with_alias.html
La sintaxis de SELECT .. tienes ejemplos con MAX y alias incluso ahi mismo:
http://www.mysql.com/doc/en/SELECT.html

Para el tema de ordenar por varios campos .. Mysql permite:

SELECT college, region, seed FROM tournament ORDER BY region, seed
(extraido del manual de Mysql -> sintaxis de SELECT ..)

Eso sí, revisa el manual para ver el criterio que toma .. pues hay cosas sobre los indices y no se q más (SQL no es mi fuerte ;( )

Lo que no se a que te refieres Cain con:

Cita:
Con Access, puedes hacer:

SELECT * FROM tabla ORDER BY id=3,id=2,id=5

Pero MySQL no lo permite
No será un GROPUP BY lo que haces ahí? ..

Un saludo,
  #4 (permalink)  
Antiguo 01/12/2002, 11:46
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
Perfecto, creo que el HAVING es lo que estaba necesitando, en un rato lo pruebo, gracias.
  #5 (permalink)  
Antiguo 01/12/2002, 15:30
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
Bueno, al final no me sirvio, supongo que no habra forma.
Me parece que la unica forma de obtener TODOS los datos de un registro cuya edad sea la maxima de la tabla, es averiaguar cual es ese maximo, y luego averiguar que registro posee ese maximo, con dos consultas.
Que alguien me diga lo contrario please!
  #6 (permalink)  
Antiguo 01/12/2002, 15:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Sobre lo del max().

Supongo que edad es un campo numerico, ¿verdad? Pues asi, a bote pronto y sin romperme mucho la cabeza, esta consulta:

select * from tabla order by edad desc limit 1

deberia devolverte el registro con la mayor edad. Ojo, no estoy seguro si el desc se pone antes o despues del nombre del campo.

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 01/12/2002, 16:36
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
Sabias que soy un idiota? (no me contestes) jeje
No se que me pasa, ya estoy medio enfermito, tenes razon, y para colmo ya lo he hecho varias veces, pero lo olvide y no se me volvio a ocurrir.
Gracias nuevamente.
  #8 (permalink)  
Antiguo 08/02/2007, 12:13
Avatar de domyhamy  
Fecha de Ingreso: julio-2005
Ubicación: México, DF
Mensajes: 40
Antigüedad: 18 años, 9 meses
Puntos: 0
Re: 2 preguntas: ORDER BY y MAX

Muchas gracias Cluster, me has salvado la vida; soy muy nueva en el manejo de php y mysql, y no podia ordenar mis registros por varios campos, ahora gracias a ti ya lo se.

MIIIIIIIIIIIIL gracias.
  #9 (permalink)  
Antiguo 08/02/2007, 14:03
Avatar de Maverickhunter  
Fecha de Ingreso: enero-2006
Mensajes: 43
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: 2 preguntas: ORDER BY y MAX

respecto a lo del order by, según yo no se puede en mysql, yo tuve un problema similar y lo resolví usando hashes, haciendo algo así:
Código PHP:
 $ordenId=array(2,10,...);

$sql="SELECT * FROM Tabla WHERE id=2 AND id=10 AND ...";
$r mysql_query($sql) or die('La consulta falló: ' mysql_error(). "en $sql");
while(
$l mysql_fetch_array($rextMYSQL_ASSOC))
{
 
$id=$l["idTabla"];
 
$dato1[$id]=$l["dato1"];
 
$dato2[$id]=$l["dato2"];
 ...
}

// despues usas los datos en el orden que quieras usando los hash
foreach($ordenId as $k)
{
 
usardatos($dato1[$k],$dato2[$k],...);

Espero te ayude esto
__________________
Maverickhunter Pepes
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 16:57.