Foros del Web » Programando para Internet » PHP »

duda funciones

Estas en el tema de duda funciones en el foro de PHP en Foros del Web. Buenas, Tengo una clase amigo que tiene dos funciones: 1. get_all() nos devuelve una array con todos los amigos de el 2. exists() // comprueba ...
  #1 (permalink)  
Antiguo 22/08/2012, 04:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
duda funciones

Buenas,

Tengo una clase amigo que tiene dos funciones:
1. get_all() nos devuelve una array con todos los amigos de el
2. exists() // comprueba si existe ese amigo

mi duda esta en como hacer el exists, ya que tengo dos formas.

1.

Código PHP:
Ver original
  1. public function exists($id_usuario){
  2.  
  3.   foreach($this->amigos as $k => $v){
  4.  
  5.     if($this->amigos[$k]['id_usuario'] == $id_usuario){
  6.        return true;
  7.     }
  8.  
  9.   }
  10.  
  11.   return false;
  12.  
  13. }


2.


Código PHP:
Ver original
  1. public function exists($id_usuario){
  2.  
  3.   $sql = "...."// query que comprueba si ese amigo exist
  4.  
  5.   if(countr($sql) > 0){
  6.  
  7.      return true;
  8.  
  9.   }else{
  10.    
  11.     return false;
  12.  
  13.   }
  14.  
  15. }


La priimera funcion tiene que llamarse ante get_all() para que cargue la array en el objeto(amigo) y luego comprobar en la funcion exists

la segunda directamente consulta con una query y no hace falta cargar la funcion con todos los amigos

NOTA: la funcion get_all() aveces puede estar llamada ya que en algunas paginas carga todos los amigos

lo que quiero saber, que opcion es mas rapido???


Saludos
  #2 (permalink)  
Antiguo 22/08/2012, 04:50
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: duda funciones

Puedes usar esto para calcular cuanto tiempo tarda en ejecutarse:


En el fichero en cuestión, donde quieras que empiece a contar pones:
$inicio = microtime(true);

Y al final:
$fin = microtime(true);
$diferencia = $fin - $inicio;
echo 'El script ha tardado '.number_format($diferencia, 2, '.', '').' segundos en ejecutarse.';
  #3 (permalink)  
Antiguo 22/08/2012, 08:03
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: duda funciones

Cita:
Iniciado por alyciashape Ver Mensaje
Puedes usar esto para calcular cuanto tiempo tarda en ejecutarse:


En el fichero en cuestión, donde quieras que empiece a contar pones:
$inicio = microtime(true);

Y al final:
$fin = microtime(true);
$diferencia = $fin - $inicio;
echo 'El script ha tardado '.number_format($diferencia, 2, '.', '').' segundos en ejecutarse.';
Pero esta en local la web creo que eso iria bien cuando la suba al hosting. Ves valida las dos opciones??
  #4 (permalink)  
Antiguo 22/08/2012, 08:19
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: duda funciones

La ventaja del primero solo sería si ya tienes cargado los amigos, si vas a hacer una consulta SQL para luego buscar dentro del array arrojado por el metodo get_all() es mejor que directamente le preguntes a tu db si existe el amigo en tu tabla de relaciones, así evitas 2 cosas, 1 que tu db te retorne todos los amigos y 2 que después de obtener los amigos aparte debas de recorrer el array de amigos para buscar el amigo en concreto...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 22/08/2012, 08:33
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

deberias preguntarle a tu DB directamente

Código PHP:
Ver original
  1. function exists($idUsuario)  {
  2.        $query = mysql_query("SELECT.... etc.");
  3.        return mysql_num_rows($query);
  4. }

mysql_num_rows devuelve un entero que corresponde a la cantidad de filas devueltas por mysql (si no hay devuelve 0 o false)
  #6 (permalink)  
Antiguo 22/08/2012, 08:42
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: duda funciones

Cita:
Iniciado por lemyboy Ver Mensaje
deberias preguntarle a tu DB directamente

Código PHP:
Ver original
  1. function exists($idUsuario)  {
  2.        $query = mysql_query("SELECT.... etc.");
  3.        return mysql_num_rows($query);
  4. }

mysql_num_rows devuelve un entero que corresponde a la cantidad de filas devueltas por mysql (si no hay devuelve 0 o false)
Solo un dato, lo peor que puedes usar para solo saber el numero de registros (ojo, no si vas a usar los registros como tal) que coinciden con tu sentencia SQL es usar mysql_num_rows, lo mejor es usar COUNT(*) de SQL, es mucho mas optimo y rapido...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 22/08/2012, 08:51
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

Cita:
Iniciado por Nemutagk Ver Mensaje
Solo un dato, lo peor que puedes usar para solo saber el numero de registros (ojo, no si vas a usar los registros como tal) que coinciden con tu sentencia SQL es usar mysql_num_rows, lo mejor es usar COUNT(*) de SQL, es mucho mas optimo y rapido...
bueno si es cierto lo que decis, pero si la base de datos no llega a volumenes importantes no va a haber ningun problema de rendimiento, en caso de usar COUNT hay que usar la función mysql_result() para obtener el resultado del query, que en ese caso va a ser solo 1 entero
  #8 (permalink)  
Antiguo 22/08/2012, 09:05
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: duda funciones

Cita:
Iniciado por Nemutagk Ver Mensaje
Solo un dato, lo peor que puedes usar para solo saber el numero de registros (ojo, no si vas a usar los registros como tal) que coinciden con tu sentencia SQL es usar mysql_num_rows, lo mejor es usar COUNT(*) de SQL, es mucho mas optimo y rapido...
jejeje que pasa si usas un select pero con limit 1 e igual usas el numrows??
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #9 (permalink)  
Antiguo 22/08/2012, 09:07
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

Cita:
Iniciado por mogurbon Ver Mensaje
jejeje que pasa si usas un select pero con limit 1 e igual usas el numrows??
y que le pasa a COUNT si le pones limit?
  #10 (permalink)  
Antiguo 22/08/2012, 09:08
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: duda funciones

Cita:
Iniciado por mogurbon Ver Mensaje
jejeje que pasa si usas un select pero con limit 1 e igual usas el numrows??
Que no tiene caso ni usar COUNT ni usar mysql_num_rows ya que SIEMPRE retornará un solo registro....

Al menos el sarcasmo debería tener logica >.<
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #11 (permalink)  
Antiguo 22/08/2012, 09:10
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: duda funciones

Cita:
Iniciado por lemyboy Ver Mensaje
y que le pasa a COUNT si le pones limit?
pues no lo veo necesario hace lo mesmo
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #12 (permalink)  
Antiguo 22/08/2012, 09:10
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

Cita:
Iniciado por Nemutagk Ver Mensaje
Que no tiene caso ni usar COUNT ni usar mysql_num_rows ya que SIEMPRE retornará un solo registro....

Al menos el sarcasmo debería tener logica >.<
ja, nobleza obliga lo acabo de probar y funciona de todas formas, pero igual quién va a usar LIMIT si necesita todos los registros?
  #13 (permalink)  
Antiguo 22/08/2012, 09:16
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: duda funciones

Cita:
Iniciado por lemyboy Ver Mensaje
ja, nobleza obliga lo acabo de probar y funciona de todas formas, pero igual quién va a usar LIMIT si necesita todos los registros?
ojo necesitas todos los registros si vas a buscar por medio de arrays si la busqueda la haces directamente en la bd como el compañeros pregunto

Código PHP:
$sql "...."// query que comprueba si ese amigo exist
 
  
if(countr($sql) > 0){
  
     return 
true;
 
  }else{
   
    return 
false;
 
  }
 

una opción seria buscar en el sql pero solo trayendo un registro , para detectar si existe , los counts en tablas muy enormes se llegan a tardar mucho , por eso puse sobre la mesa esta opción
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #14 (permalink)  
Antiguo 22/08/2012, 09:18
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

bueno entonces a ver esta ultima versión, asi ayudamos al amigo...

Código PHP:
Ver original
  1. function exists($idUsuario)  {
  2.            $query = mysql_query("SELECT COUNT(*) FORM tabla WHERE etc.");
  3.            return mysql_result($query, 0);
  4.     }
  #15 (permalink)  
Antiguo 22/08/2012, 09:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: duda funciones

mmm
no es mas rapido poner un limi1 y depsues en php esto,

Código PHP:
Ver original
  1. if(countr($sql) > 0){
  2.  
  3.      return true;
  4.  
  5.   }else{
  6.    
  7.     return false;
  8.  
  9.   }

creo que para volumen altos es lo mejo, no??
  #16 (permalink)  
Antiguo 22/08/2012, 09:21
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

Cita:
Iniciado por mogurbon Ver Mensaje
ojo necesitas todos los registros si vas a buscar por medio de arrays si la busqueda la haces directamente en la bd como el compañeros pregunto

Código PHP:
$sql "...."// query que comprueba si ese amigo exist
 
  
if(countr($sql) > 0){
  
     return 
true;
 
  }else{
   
    return 
false;
 
  }
 

una opción seria buscar en el sql pero solo trayendo un registro , para detectar si existe , los counts en tablas muy enormes se llegan a tardar mucho , por eso puse sobre la mesa esta opción
tenes razón es interesante lo que planteas, por ahi en el primero codigo que tire (el de la discusion) con mysql_nums_rows, si le ponemos LIMIT 0,1 al query, entonces la funcion va a devolver 0 o 1 segun exista o no, al final me parece la mejor opción, no se que opinan.

La versión de array no la recomiendo, si la base se pasa de tamaño el array segun como se llene puede llegar a colapsar la memoria de php
  #17 (permalink)  
Antiguo 22/08/2012, 09:24
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: duda funciones

Cita:
Iniciado por lemyboy Ver Mensaje
bueno entonces a ver esta ultima versión, asi ayudamos al amigo...

Código PHP:
Ver original
  1. function exists($idUsuario)  {
  2.            $query = mysql_query("SELECT COUNT(*) FORM tabla WHERE etc.");
  3.            return mysql_result($query, 0);
  4.     }


mmm viendo ya tu código me late que si numrows puede ser mejor opción , el query que manejas ahí en el where siempre deberá llevar la comparación con el id de usuario , osea count+where userid, pero si se hace el query buscando el id se usuario directamente solo seria la búsqueda de este , es mas el limit sale sobrando por que dudo que halla ids repetidos
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #18 (permalink)  
Antiguo 22/08/2012, 09:28
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

Cita:
Iniciado por Blashak Ver Mensaje
mmm
no es mas rapido poner un limi1 y depsues en php esto,

Código PHP:
Ver original
  1. if(countr($sql) > 0){
  2.  
  3.      return true;
  4.  
  5.   }else{
  6.    
  7.     return false;
  8.  
  9.   }

creo que para volumen altos es lo mejo, no??
yo creo que si, pero la funcion countr no existe, y supongo que quisiste poner count pero solo sirve para array, tenes que usar una funcion como mysql_result o mysql_num_rows para obtener ese dato.
Saludos.
  #19 (permalink)  
Antiguo 22/08/2012, 09:31
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: duda funciones

Cita:
Iniciado por lemyboy Ver Mensaje
yo creo que si, pero la funcion countr no existe, y supongo que quisiste poner count pero solo sirve para array, tenes que usar una funcion como mysql_result o mysql_num_rows para obtener ese dato.
Saludos.

jajajaja yo no lo puse , lo puso el compañero pero se sobreentiende que es pseudocodigo , pero si a mi parecer lo mas optimo seria buscar por id de usuario y usar en numrows de php
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #20 (permalink)  
Antiguo 22/08/2012, 09:43
Avatar de lemyboy  
Fecha de Ingreso: agosto-2012
Ubicación: City Bell
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: duda funciones

Cita:
Iniciado por mogurbon Ver Mensaje
jajajaja yo no lo puse , lo puso el compañero pero se sobreentiende que es pseudocodigo , pero si a mi parecer lo mas optimo seria buscar por id de usuario y usar en numrows de php
bueno entonces cerrando, a ver si estamos todos de acuerdo

Código PHP:
Ver original
  1. function exists($idUsuario)  {
  2.            $query = mysql_query("SELECT * FROM tabla WHERE ... LIMIT 0,1");
  3.            return mysql_num_rows($query);
  4.     }
  #21 (permalink)  
Antiguo 22/08/2012, 09:51
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: duda funciones

el limit 1 ya no tendria caso


Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE user_id=$user_id

si existe regresara solo un registo , si no , no regresa ningun renglon
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo

Etiquetas: funciones, sql, usuarios
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 08:32.