Foros del Web » Programando para Internet » PHP »

Sacar Posicion numerica en los resultados MySQL

Estas en el tema de Sacar Posicion numerica en los resultados MySQL en el foro de PHP en Foros del Web. Tabla MySQL (Ejemplo.-) : Cita: ----------------- |ID |H1 | ----------------- |1 |656 | |2 |369 | |3 |375 | |4 |1298 | |5 |29 | ...
  #1 (permalink)  
Antiguo 16/04/2006, 10:49
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Sacar Posicion numerica en los resultados MySQL

Tabla MySQL (Ejemplo.-) :
Cita:
-----------------
|ID |H1 |
-----------------
|1 |656 |
|2 |369 |
|3 |375 |
|4 |1298 |
|5 |29 |
|6 |197 |
|7 |591 |
-----------------
Amigos una Cosa.. Como haríamos si al hacer una consulta SQL en WHERE ID=3 ORDER BY H1 DESC

Bueno lo siguiente después de aplicar el mysql_fetch_array podamos sacar un valor de la posición numérica de ese campo en los registros, ósea en este caso Si ID=3 Y ORDENAMOS POR H1 DESC entonces encontraríamos un valor de "4".- ¿POR QUE? ...Bueno si notamos bien en la tabla el ID 3 estaría posicionado de 4 por el valor que tiene H1 de 375

(order by H1 desc) de la tabla ejemplo ya descrita arriba

1298
656
591
375 (El ID 3 ESTA Posicionado de 4 al ordenar)
369
197
29

pero solo necesito el valor de ese ID 3 ósea
RESULTADO DE LA CONSULTA = "4"

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #2 (permalink)  
Antiguo 16/04/2006, 13:23
 
Fecha de Ingreso: noviembre-2005
Ubicación: Córdoba - Argentina
Mensajes: 155
Antigüedad: 18 años, 4 meses
Puntos: 1
pero basicamente que es lo que queres? que te muestre solo el valor del ID 3?
  #3 (permalink)  
Antiguo 16/04/2006, 13:33
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 2 meses
Puntos: 6
Bueno creo que no esta en posicion 4 creo que esta en posicion 3, no se si se empieza a contar desde 0
__________________
www.dataautos.com
  #4 (permalink)  
Antiguo 16/04/2006, 14:02
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Cita:
Iniciado por asinox
Bueno creo que no esta en posicion 4 creo que esta en posicion 3, no se si se empieza a contar desde 0
Esta en posicion "4" ...

Creo que no me explique bien... PONGAMOLO ASI:

TENGO ESTA TABLA :
Cita:
-----------------
|ID |H1 |
-----------------
|1 |656 |
|2 |369 |
|3 |375 |
|4 |1298 |
|5 |29 |
|6 |197 |
|7 |591 |
-----------------
quiero saber la posicion de ID 3 con respecto a los valores de H1 ORDENADO DESCENDINTEMENTE

Cita:
1298
656
591
375 (El ID 3 ESTA Posicionado de cuarto "4to" al ordenar)
369
197
29
osea quiero mostrar el resultado de la consulta hecha a ID3 que obaviamente es "4"

pero la verdad estoy trankado en como debo hacer la consulta o mi arreglo..
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #5 (permalink)  
Antiguo 16/04/2006, 15:03
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 2 meses
Puntos: 6
ahhhhhhh osker

pues si tu haces la cosulta ORDER BY H1 DESC

no creo que haya que hacer anda solo
Código PHP:
//sql_query_aqui_creo

//entonces

while($row=mysql_fetch_array($Query)){
echo 
$row['ID']; // o el valor echo $row['H'];

yo creo que es esooooo + esta funcion qeu debes mirar como funcion mysql_field_seek

Saludos
__________________
www.dataautos.com
  #6 (permalink)  
Antiguo 16/04/2006, 18:18
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Gracias por tu respuesta amigo, pero pues no!

...Si lo hago de esa manera solo me devolverá el valor o valores de ID y H1 y eso no es lo que quiero solo quiero saber el en que posición esta el ID 3 al yo hacer una consulta...

¡PARA PONERLO MAS FÁCIL!

Quiero hacer un RANKING.. ... ósea que ranking tiene un determinado registro (en este caso puse el ejemplo de ID3) en la tabla partiendo de los valores que se encuentran en H1.-

Obviamente el Ranking es el valor que quiero conseguir.-

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #7 (permalink)  
Antiguo 16/04/2006, 18:46
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 2 meses
Puntos: 6
miraste la funcion mysql_field_seek ?
__________________
www.dataautos.com
  #8 (permalink)  
Antiguo 16/04/2006, 19:02
okram
Invitado
 
Mensajes: n/a
Puntos:
a mi se me ocurre esto:

Código PHP:
//<?
$i 
1;
while(
$row=mysql_fetch_assoc($Query)){ 
  if(
$row['ID'] == 3) {
    
$posicion $i
  } 
// o el valor echo $row['H']; 
  
$i++;
}

// tienes la posicion en la variable $posicion
  #9 (permalink)  
Antiguo 17/04/2006, 09:23
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Cita:
Iniciado por asinox
miraste la funcion mysql_field_seek ?
Si amigo la habia visto mysql_field_seek pero leyendo bien la funcion que tiene no me sirve, e incluso intente aplicarla antes de hacer el while sacando los resultados con el mysql_fetch_field le aplique al $QUERY asi, mysql_field_seek($QUERY,0);

Pero nada..

De todas maneras gracias amigo..

-------------
Hey okram ..Perfecto! amigo es juntamente lo que estaba intento hacer.-
Gracias.- con el uso del mysql_fetch_assoc solucione el problema.-
Código PHP:
<?
$i 
1;
while(
$row=mysql_fetch_assoc($Query)){ 
  if(
$row['id'] == $id) {
    
$posicion $i
  }
  
$i++;
}
?>
Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #10 (permalink)  
Antiguo 17/04/2006, 09:53
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 2 meses
Puntos: 1
Disculpen que me meta: ese algoritmo funciona bien, pero siempre recorre todo el resultado de la consulta, aún cuando ya encontró el id buscado (supongo que será único). Si le agregamos un break o una bandera nos ahorraremos algo de procesamiento:

Usando break():
Código PHP:
<?
$i 
1
while(
$row=mysql_fetch_assoc($Query)){  
  if(
$row['id'] == $id) { 
    
$posicion $i;  
    break;
    } 
  
$i++; 
}
?>
Con una bandera:
Código PHP:
<?
$i 
1
$encontrado false;
while(!
encontrado && $row=mysql_fetch_assoc($Query)){  
  if(
$row['id'] == $id) { 
    
$posicion $i;  
    
$encontrado true;
    } 
  
$i++; 
}
?>
Saludos.
__________________
¿Se me entiende la letra?
  #11 (permalink)  
Antiguo 17/04/2006, 10:14
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Cita:
Iniciado por JorgitoAlfajor
Disculpen que me meta: ese algoritmo funciona bien, pero siempre recorre todo el resultado de la consulta, aún cuando ya encontró el id buscado (supongo que será único). Si le agregamos un break o una bandera nos ahorraremos algo de procesamiento:
Excelente Observacion amigo.-

En lo particular usare el break;

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #12 (permalink)  
Antiguo 17/04/2006, 17:33
okram
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por xyyy7
con el uso del mysql_fetch_assoc solucione el problema
una importante aclaracion... el uso de mysql_fetch_assoc no fue la solucion a tu problema. Bien pudiste haber usado mysql_fetch_array y el resultado era el mismo... mysql_fetch_array tiene un segundo parametro opcional:

mysql_fetch_array ( int id_resultado [, int tipo_de_resultado] )

tipo_de_resultado puede ser MYSQL_ASSOC, MYSQL_NUM, y MYSQL_BOTH...
  1. mysql_fetch_array($query,'MYSQL_ASSOC'); te devolvera un array que tendra como indices solo los nombres de las columnas de la tabla. Colocar ese parametro es como usar mysql_fetch_assoc($query);
  2. mysql_fetch_array($query,'MYSQL_NUM'); te devolvera un array que tendra como indices un numero relativo a la columna que refiere, empezando de cero para la primera columna, 1 para la segunda y asi sucesivamente. Es igual a mysql_fetch_num($query);
  3. mysql_fetch_array($query,'MYSQL_BOTH'); te devuelve tanto indices asociativos como numericos, es decir las dos anteriores juntas, y es este el valor que el segundo parametro trae por defecto.
Use esta funcion porque veo que trabajas con indices asociativos, y no requieres de los indices numericos. mysql_fetch_assoc consume menos recursos que mysql_fetch_array.

Te sugiero revises el manual de php.net para estas funciones:

http://www.php.net/mysql_fetch_array
http://www.php.net/mysql_fetch_assoc
http://www.php.net/mysql_fetch_row

Lo que en relidad soluciono tu problema es el uso de la variable $i que se incrementa en 1 por cada bucle del while, asi te dara el orden que deseas.

Ahora, hablando de un menor consumo de recursos por parte del servidor, a mi tambien me vale la aclaracion de JorgitoAlfajor, la verdad siempre me pregunte como detener el while una vez que se cumplia cierta condicion, pero nunca me preocupe en buscar sobre eso, gracias JorgitoAlfajor.

Suerte
  #13 (permalink)  
Antiguo 18/04/2006, 06:17
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Cita:
Iniciado por okram
mysql_fetch_assoc consume menos recursos que mysql_fetch_array.
Me llamo la atención ese detalle, Gracias por tu observación.-

Voy a checkiar...

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #14 (permalink)  
Antiguo 20/04/2006, 06:40
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 2 meses
Puntos: 6
interesante!
__________________
www.dataautos.com
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 02:22.