Foros del Web » Programando para Internet » PHP »

Cual es la mejor opcion??

Estas en el tema de Cual es la mejor opcion?? en el foro de PHP en Foros del Web. Wenas, tengo una duda, quiero separar a mis usuarios segun su pais de procedencia, para ello he cargado una lista desplegable con todos los paises ...
  #1 (permalink)  
Antiguo 27/07/2004, 11:31
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 4 meses
Puntos: 0
Cual es la mejor opcion??

Wenas, tengo una duda, quiero separar a mis usuarios segun su pais de procedencia, para ello he cargado una lista desplegable con todos los paises y no tengo claro de cual seria mejor opcion si en el value acortar el nombre de los paises o dejarlo tal cual, es decir

Asi:
Código HTML:
<OPTION VALUE='AFGHANISTAN'>AFGHANISTAN</OPTION><OPTION VALUE='ALBANIA'>ALBANIA</OPTION> 
o asi:
Código HTML:
<OPTION VALUE='AW'>ARUBA</OPTION><OPTION VALUE='AU'>AUSTRALIA</OPTION> 
Teniendo en cuenta de que despues tengo que grabar el value del pais del usuario en la BD y que posteriormente en su cuenta mostrare su pais yo considero que lo mas sencillo y optimo seria dar al value el nombre completo del pais, ya que si no a la hora de mostrar el pais en la cuenta del usuario tendria que crear un CASE enorme para que segun la abreviatura asi mostrase el nombre del pais.

Pero no tengo claro que ralentizaria mas mi web si ese CASE, o unos registros mas largos en la BD

Salu2 y Gracias
  #2 (permalink)  
Antiguo 27/07/2004, 11:56
Avatar de Rnsto  
Fecha de Ingreso: marzo-2002
Ubicación: Puerto Vallarta, Mexico
Mensajes: 204
Antigüedad: 22 años, 1 mes
Puntos: 0
Tal vez, este equivocado sin embargo creo que cambiar a nombres cortos y despues regresarlo.. hace mas lento tu sistema.

Lo registros largos en BD, solo ocupan mas espacio, pero no afectan la velocidad. (A menos que les hagas consultas a estas)
__________________
Saludos
Rnstho Luna
go2mexico.com
  #3 (permalink)  
Antiguo 27/07/2004, 11:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm .. Todo depende para que uses ese dato .. Si piensas a corto plazo implementar estadísticas sobre Usuarios por pais, te vendría mejor normalizar la BD mejor. Si sólo quieres ese dato como "anecdotico" para mostrarlos en listados .. guarda todo el nombre del pais y listo (si guardas la abreviación y quieres mostrar el nombre completo el pais .. tendrías que tener un array o BD para obtener dicho dato ..)

Si deseas normalizar (con fines estadísticos y otros) .. Yo usaría identificadores de los registros de tu BD numéricos (y clave).

Es decir, una tabla para tus paises
id_pais
nombre_pais

y generar ese HTML de tus <option> desde los datos de la BD:

Código PHP:
echo "<select name=\"pais\">\n";
while (
$row=mysql_fetch_array($resultado)){
echo 
"<option value=\"".$row['id_pais']."\">".$row['nombre_pais']."</option>\n";
}
echo 
"</select>\n"
el dato para los INSERT/UPDATE sería el ID_pais en tu tabla del perfil del usuario como dato numérico (INT o similar) e indexado.

Las consultas SQL se complican un poco bajo este tipo de normailización .. pero tu BD no crecerá de tamaño con datos redundantes. El tiempo consumido por este tipo de consultas será mayor que acceder al dato ya "listo" .. pero, recuerda también que una BD cuanto más pesada (en datos) se hace .. el rendimiento tamibién cae.

Un saludo,
  #4 (permalink)  
Antiguo 27/07/2004, 12:32
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 4 meses
Puntos: 0
Wenas, creo que normalizare los datos y pondre los nombre completos, tal vez ahora no necesite normalizarla pero siempre es mejor estar preparado para lo que venga... .

La unica pega que le encuentre es meter todos los nombres de los paises uno a uno, voy a ver si engaño a mi novia para que me eche una mano xDDD

Si no he entendido mal el rendimiento al principio decaera ya que tendra que acceder a 2tablas distintas para obtener un dato, pero a la larga su rendimiento sera mejor ya que tendra menos tamaño no?
  #5 (permalink)  
Antiguo 27/07/2004, 12:34
Avatar de camargo  
Fecha de Ingreso: abril-2002
Ubicación: Kerétaro, Méjiko
Mensajes: 1.045
Antigüedad: 22 años
Puntos: 2
debes usar esto pequeño:

$sexo=$row["sexo"];
$sexo_nombres=Array("Hombre","Mujer","Otr@");
echo "<select name=\"sexo\">\n";
foreach ($sexo_nombres as $sex){
if ($sexo==$sex){
echo "<option value=\"".$sex."\" selected>".$sex."\n";
}else{
echo "<option value=\"".$sex."\">".$sex."\n";
}
}


Aqui se pone en un array los resultados disponibles, x que si usas la opcion de cluster tendrias q repetir el dato q ya esta en uso, y no se le ve caso,,

En este ejemplo,, solo los resultados concretos los metes en el array, ahi uso x ejemplo el sexo y muestra como resultados HOMBRE, MUJER y OTR@ y escogera el que tenga el usuario en uso ;)

Suerte :D
__________________
http://www.chorcha.com
  #6 (permalink)  
Antiguo 27/07/2004, 13:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Si no he entendido mal el rendimiento al principio decaera ya que tendra que acceder a 2tablas distintas para obtener un dato, pero a la larga su rendimiento sera mejor ya que tendra menos tamaño no?
Si, más o menos será así.

Las consultas SQL que tendrás que hacer para obtener ese "usuario" y el nombre del pais serían del tipo

SELECT usuarios.*,paises.nombre_pais FROM usuarios,paises WHERE usuarios.id_pais=paises.id_pais AND .. otras condiciones habituales si las requieres.

Pero mejor usando Uniones de SQL (JOIN y afines)

----

Cita:
Aqui se pone en un array los resultados disponibles, x que si usas la opcion de cluster tendrias q repetir el dato q ya esta en uso, y no se le ve caso,,
Camargo .. no puse un ejemplo completo atendiendo a un valor preestablecido .. En tal caso tu ejemplo ya lo muestra. Pero, de donde provengan esos datos (de un array o _fetch_array() u otros ) es lo de menos. Es decir . .no hables de "arrays" como si el hecho de "pre-establecer" el valor de un <select> fuese necesario usar arrays sino que hables en general.

De todas formas .. mi ejemplo iva enfocado al ciclo completo:
a) generar el select dinámicamente
b) guardando los Identificadores en la BD (normalización)

No en guardar "el nombre del pais abreviado" para luego tener que usar un array asociativo: array("ES"=>"España","CL"=>"Chile") .. etc ...

(tal vez nos entendimos mal .. pero bueno ahí queda).

Un saludo,
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 11:09.