Foros del Web » Programando para Internet » PHP »

buscar un registro en una tabla MySQL

Estas en el tema de buscar un registro en una tabla MySQL en el foro de PHP en Foros del Web. Hola he estado mirando la documentacion de PHP, pero la verdad es dificil buscar sin saber exactamente lo que busco. Estoy intentando programar un sistema ...
  #1 (permalink)  
Antiguo 09/11/2004, 05:33
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 13 años, 7 meses
Puntos: 8
buscar un registro en una tabla MySQL

Hola he estado mirando la documentacion de PHP, pero la verdad es dificil buscar sin saber exactamente lo que busco.
Estoy intentando programar un sistema de registro de usuarios para una pagina, y como es logico me gustaria comprobar si el nombre de usuario que solicita la persona que hace el registro ya esta cogido para que no pueda crear un nuevo registro con el mismo nombre.
Lo intente hacer con un bucle for que recorriera cada registro de la tabla comprobando a cada vez si el nombre de usuario era el mismo que el que habia en la tabla. Pero no se que hice mal que esto me daba algunos errores.
Lo que quisiera saber es si hay alguna funcion (que me imagino que si) para decirle directamente que busque en todos los registros de una tabla, si un campo determinado ya existe o no.

Y otra cosilla, conviene poner el nombre de usuario como clave primaria no? para asegurarme de que no se repite y tal.

No se si deberia haber puesto esto en el foro de bases de datos o que, si algun admin considera que deberia estar ahi que lo mueva, pero me parecia que estaba tan relacionado con php como con bases de datos.

gracias de antemano. saludos.
  #2 (permalink)  
Antiguo 09/11/2004, 05:37
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 13 años, 2 meses
Puntos: 0
Yo lo haria de la siguiente forma:

recojeria el valor en cuestion, luego haria un select con un where campo='$variable'

entonces despues de hacer el query, en vez de poner

while($row=mysql_fetch_array($result1)){

pondria

if($row=mysql_fetch_array($result1)){

si existe ese valor dentro del if pones el mensaje de error

else

introduzes el valor

Creo que tendria que funcionar.
  #3 (permalink)  
Antiguo 09/11/2004, 05:40
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
pues sería un simple

$sql="select nombre from tabla where nombre='$nombre'";
$result=mysql_query($sql);
if (mysql_num_rows($result)>0){
echo "El usuario ya existe";
}else{
echo "El usario no existe";
}
__________________
¿Te apasiona el mundo del guión? El portal del guión

Última edición por living; 09/11/2004 a las 05:41
  #4 (permalink)  
Antiguo 09/11/2004, 05:42
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 13 años, 2 meses
Puntos: 0
living tuvimos la misma idea xDDD yo creo que es la mejor opcion no?
  #5 (permalink)  
Antiguo 10/11/2004, 07:14
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 13 años, 7 meses
Puntos: 8
parece que si, esta noche probare a ver que tal.
gracias, saludos.
  #6 (permalink)  
Antiguo 10/11/2004, 08:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Shute
living tuvimos la misma idea xDDD yo creo que es la mejor opcion no?
El detalle es que la opción de living cuenta los registros que arroja la consulta (con mysql_num_rows()) .. en tu caso sólo verificas que msyql_query() no arrojó un error . .pero no realmente si hay 0 o más resultados .. Lo que interesa es ver si hay resultados en esa consulta SQL "condicional".

Por otro lado .. si se trata sólo de hace ese tipo de consulta para ver si existe o no tal registro bajo tal condición pueden usar SQL para optimizar el asunto.

La función mysql_num_rows() lo que hace es obtener todo el posible resultado (N registros) y de ahí contarlos (ese proceso lo hace PHP) . .Si se usa SQL (COUNT()) .. el proceso lo hace integramente Mysql, este sólo entrega un sólo registro de resultado con ese valor de registros que coinciden con la condición.

Código PHP:
$sql="select COUNT(*) from tabla where nombre='$nombre'";
$result=mysql_query($sql);
if (
mysql_result($result,0) ==1){
echo 
"El usuario ya existe";
}else{
echo 
"El usario no existe";

Por lo demás .. se espera un sólo resultado o 0 .. así que se puede usar == en lugar del operador > ...

Un saludo,
  #7 (permalink)  
Antiguo 11/11/2004, 05:48
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 13 años, 7 meses
Puntos: 8
hola, gracias cluster. Me interesa lo que dices, pero podrias explicarme un poco mejor que hace esa consulta? lo del COUNT y eso...
Si no he entendido mal devolvera un 1 si existe y un 0 si no existe?

gracias, saludos
  #8 (permalink)  
Antiguo 11/11/2004, 05:58
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
Lo que devuelve es el número de registros que cumplen la condición que indicas en el where. En tu caso te devolvería 1 cuando el registro exista (porque se supone que en ningún momento se han podido añadir más ya que lo compruebas antes de insertarlo)
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #9 (permalink)  
Antiguo 11/11/2004, 06:13
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 13 años, 7 meses
Puntos: 8
vale vale, ya pillo. voy a probar.
si es posible sigo queriendo que alguien me hable del COUNT ese...

saludos.
  #10 (permalink)  
Antiguo 11/11/2004, 06:18
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
Tampoco hay mucho más que contar, echa un vistazo a este link:

http://perso.wanadoo.es/tutoriales/c...ql/mysql12.htm
__________________
¿Te apasiona el mundo del guión? El portal del guión
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 14:38.