Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ^Tifa^

#851
Coloque el ejemplo pensando que era interpretable para moverlo  a otro lenguaje que conozcas por ejemplo...

Mas o menos en PHP la traduccion de lo que hice seria asi :

Código (php) [Seleccionar]


$servidor = 'localhost';
$usuario = 'usuario';
$contrasena = 'password';
$db = 'basesita';

$nombres = array("Juana", "Juan", "Pedro", "Pepin");

$conexión = mysql_connect($servidor, $usuario, $contrasena) or die("Error con la conexión\n");
mysql_select_db($db,$conexión) or die("Problemas con la Base Datos\n");

$consulta = mysql_query("SELECT * FROM jugadores", $conexión);


for ($numero = 0; $numero < mysql_num_rows($consulta); $numero++) {

$consulta1 = mysql_query("SELECT * FROM jugadores WHERE id = $numero", $conexión);

while ($registros = mysql_fetch_array($consulta1)) {

foreach ($nombres as $nombrecitos) {

$consulta2 = mysql_query("UPDATE jugadores SET nombres = $nombrecitos WHERE id = $registros['id']", $conexión) or die(mysql_error());


mysql_free_result($consulta2);
}

}
mysql_free_result($consulta1);

}

mysql_free_result($consulta);




Pero es un mas o menos... no se si funcione, no soy muy agil con PHP. Pero se deberia entender el ejemplo.
#852
Try .. Catch?

Código (php) [Seleccionar]


function divide() {

try {

if (($this->numerouno / $this->numerodos || $this->numerodos / $this->numerouno) == 0) {

throw new Exception("Error no se puede dividir entre cero");

}

} catch(Exception $e) {

echo $e->getMessage();
return 1;
}

$resultado = $this->numerouno / $this->numerodos;
echo "$this->numerouno entre $this->numerodos es igual a $resultado <br> " ;
return 0;

}


#853
ID es precisamente eso el indice o la llave primaria de la tabla.... el campo identificador como llave primaria de la tabla, puede llamarse ID, codigo, nombres, como gustes...  :P

Sobre tu pregunta Sempus si es valido, podrias obtener todos los registros de la tabla A donde sus id no sean iguales a los de la tabla B con esa subconsulta, aunque aun desconozco porque utilizas la clausula DISTINC en la consulta al id de la tabla B, si id es una llave primaria o unica de la tabla B no deberia acceptar duplicados, por lo tanto DISTINC no ejerceria ninguna funcion aca, a no ser que como te explico id de la tabla B no sea ningun indice primario y tenga campos repetidos o sea un indice primario secundario.

La consulta es valida para obtener lo que se busca si son datos chiquitos, pero para optimizacion necesitan verificar todo con EXPLAIN

http://dev.mysql.com/doc/refman/5.0/es/query-speed.html

en esta consulta :

SELECT * FROM tabla_A
WHERE id  NOT IN( SELECT id DISTINCT FROM tabla_B );

la tabla B es una subconsulta de la A, y si id es un indice en la tabla B vamos bien en esa parte de optimizacion pero.. la tabla A le estamos haciendo un Select Todo donde su id no este dentro de lo que la subconsulta genera... por lo tanto para que el id de la tabla A obtenga una respuesta para comparar o saber que datos debe devolver, primero tiene que recorrer todos los indices y data de sus archivos devueltos por la tabla B.... y ahi entra el dilema, se puede semi optimizar la tabla A si por ejemplo el campo id no accepta valores Nulos por defecto podrias hacer :

SELECT * FROM tabla_A
WHERE id  NOT IN( SELECT id DISTINCT FROM tabla_B ) and A.id is not null;

Saludos :)
#854
En perl que es el lenguaje scripting que mas comprendo, lo hice justo como le sugeri al amigo y funciona.

Código (perl) [Seleccionar]


our $consulta;

my @nombres = (" ", "Juan", "Juana", "Pepe", "Carlos");

my $conexión = DBI->connect("dbi:mysql:primaria", "marian", "123", {
RaiseError => 0, PrintError => 0}) or die "No me puedo Conectar :( \n";



for ( my $numero = 0; $numero < 5; ++$numero ) {

$consulta = $conexión->prepare( qq{ SELECT * FROM jugadores WHERE id =
$numero }) or warn DBI::errstr;
$consulta->execute();

while ( my $todo = $consulta->fetchrow_hashref) {

foreach (@nombres) {

my $consulta2 = $conexión->prepare( qq{ UPDATE jugadores SET
nombres = '$nombres[$numero]' WHERE id = $todo->{id}} ) or
warn DBI::errstr;
$consulta2->execute() or warn DBI::errstr;

$consulta2->finish();
}


}
$consulta->finish();

}


$conexión->disconnect();





Y no porque lo diga yo indica que funcione 100% :)
#855
Te dare una pista que utilizo bastante... y que muchos DBA suelen utilizar ya que es un requisito indispensable para optimizacion de consultas y procedimientos almacenados.

TUNNING....

indaga y conoce la funcion EXPLAIN dentro del motor MySQL  ;)  esta te ayudara mas de lo que te imaginas y tus consultas quedaran bastantes optimizadas.
#856
Voy a suponer que quieres actualizar todos los jugadores en una consulta. Suponte que el registro que quieres actualizar de la tabla jugadores es el campo nombres....

Pues generas en tu codigo una consulta que obtenga todos los nombres de los jugadores y guardas el resultado en una variable arreglo.

Código (sql) [Seleccionar]
  SELECT NOMBRES FROM JUGADORES WHERE ID = JUGADOR%

Ahora te preguntaras porque opte por utilizar el operador igual ( = ) y no LIKE, por la siguiente razon... mi intencion es optimizar la consulta SQL si mi predicado es una constante le sera mas sencillo a la base de datos ir exactamente al grano del asunto, pero si uso LIKE a la base de datos tendra que indagar toda la data y todos los indices antes de llegar a su objetivo... y esto es algo mediocre con el desenvolvimiento, si es con 100 o 1,000 o 5,000 registros la diferencia no es grande pero si hablamos de miles o millones ... mejor ve optimizando el codigo desde el inicio asi te evitas problemas futuros recuerda MySQL adora la RAM, Ahora para responder a tu duda sobre si utilizo el operador igual y no LIKE como vas a obtener los registros?  ya que tus id van en un rango numerico creciente jugador1, jugador2, jugador3 ... etc.. y con LIKE obtienes todos a la vez pero con el operador igual no.. al menos que el ID sea siempre una constante. He aqui donde entra la programacion, haras un bucle FOR.. LOOP



for ($numero = 0; $numero <= 10; $numero++) {

$sql = mysql_query("[code=sql]  SELECT NOMBRES FROM JUGADORES WHERE ID = JUGADOR[numero]
", $conexión);

}
[/code]

Cuando obtienes el listado de los nombres de los jugadores por ejemplo, lo guardas todos en una variable normal, no se como se haga en PHP para el valor que contiene X variable guardarla en un arreglo creo que es con la funcion explode o implode... pero no se bien. Ya dividido los resultados en una variable arreglo podrias actualizar todos los campos requeridos por ejemplo asi :

Código (php) [Seleccionar]


foreach (@areglo) {

mysql_query("UPDATE JUGADORES SET.... WHERE NOMBRES = $arreglo", $conexión)


}


#857
PHP / Re: Ayúda con PHP + Apache + MySQL
11 Abril 2009, 19:00 PM
Pos no se que onda, yo he instalado decenas de veces en plataforma Windows Apache + PHP + MySQL sin problemas algunos. Obviamente lo hago en orden cronologico digase primer paquete  a instalar Apache, segundo paquete PHP (Hazta lo que tengo entendido en el proceso de instalacion de PHP bajo Windows, este te pregunta quieres integrarme a Apache como modulo o como CGI? y eliges uno de los dos, a lo que luego te pregunta usas Apache 1.x o Apache 2.x... a lo que tambien das respuesta y el solito modifica httpd.conf y se agrega) Y funciona 100% sin problema alguno te lo aseguro, sobre MySQL, este puede ser instalado antes o despues de Apache + PHP. Pero en el caso de PHP este debe ser instalado despues de tener Apache en WIndows....

Pero si te resulta tan complicado el proceso, pues Xammp o Wammp aunque estos ultimos no suelen agradarme mucho por el mero hecho de traer aplicaciones un pelin ya atrasadas pero en fin...
#858
PHP / Re: [MYSQL] Problema con float
29 Marzo 2009, 19:54 PM
Encanto escucha.

CitarEl tipo FLOAT se usa para representar tipos numéricos aproximados

Lo que Mysql te esta haciendo no esta mal, de hecho esta explicitamente explicado aqui :

http://dev.mysql.com/doc/refman/5.0/es/numeric-types.html

Porfavor, lee el link anterior y comprenderas mas detalladamente porque el tipo FLOAT redondea y DECIMAL no. Esta gente te lo explica claro y esta en espanol :)

Sobre los puntitos flotantes no confundir el tipo de dato con la cantidad de puntos flotantes y que esto sea causa de reondeo. Si yo tengo ejemplo decimal(7,2)  Y inserto un dato 450.300 el va a guardarme  450.30 Porque le estoy diciendo tengo una capacidad de guardar 7 numeros ENTEROS y 2 decimales o sea el cuenta que despues de yo colocar el puntito a mi cifra solo accepta 2 numeros mas porque así yo se lo especifique. Pero el no me esta redondeando nada, porque yo le dije solo acceptame 2 decimales despues del puntito. Pero perfectamente mi campo anterior acceptaria sin problemas 45000.20  y no lo redondearia como dices tu, que eso no se llama redondear en este caso, se llama lo que yo te peticiono que guardes.
#859
El concepto es precisamente no tratar de trapear o camuflear algo como el estilo del ejemplo expuesto.. porque si vamos todos programando asi, entonces se pierde la realidad de lo que debe cumplirse en la POO.

No confundir $this con que esta llamando funciones y decir es lo mismo como que yo haga clase::funcion(parametro) porque this tiene otro proposito. Dentro de una clase bien estructurada los metodos y los atributos tienen una relacion ya que estan encapsulados dentro de la misma clase.. pero mirando el ejemplo posteado lo que se esta haciendo es una programacion estructurada con intento de camuflaje en un lenguaje orientado a objetos y eso la verdad... teoricamente esta mal, no se aplica y no existe. Es como querer mezclar sintaxis de C y C++ a la vez... eso no te hace mega groso ni mas poderoso, eso esta mal, y hay que respetar las cosas como estan establecidas solo eso.
#860
PHP / Re: [MYSQL] Problema con float
29 Marzo 2009, 19:33 PM
El problema es que FLOAT no guarda precisamente cifras numericas altas sin alterarlas o redondearlas al valor mas cercano de la misma... es una deduccion de base fracionaria 10. No soy buena en matematicas lol para explicarte....

Pero aun alteraras la tabla y pongas el tipo como Double estaras supuesto a seguir sufriendo de redondear valores a sus niveles mas cercanos, aunque float solo soporte 4 bytes y double 8 me parece.

Si quieres tener cifras altas exactas sin redondeos incluidos, querras alterar ese campo al tipo Decimal o Numeric. Tendras una ligera baja en el desenvolvimiento ante las consultas SQL pero estara garantizado que tus cifras insertadas no seran redondeadas.