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^

#841
Gracias mas o menos entiendo el concepto chikitines  :-*

Lo que aun me deja un poquito asi como vacia es el hecho de 'cuando utilizar esto' y 'para que?'

Es que no se, me han dados ganas asi como de aprender python de repente  :) igual no pretendo abandonar perl, pero es bonito conocer un lenguaje POO tambien y como perl no cumple a cien por cien este requisito, y C++ es muy complicado para mi cabeza  :-\  y php es mas dirigido a web y yo no soy amiga a la programacion web jejejejeje por eso estoy optando con python.

Hay muchos terminos que no conozco y voy asi indagando y buscando haber que hacen y para que, pero ese termino del __name__ aun no lo llevo asi tan claro de cuando debo y porque utilizarle... Ahi esta el dilema  :-\

Pero, aprecio mucho su ayuda chicos son un amor  :laugh:
#842
Es una pregunta extremadamente tonta lol...  ;D

Pero realmente como no he encontrado definicion exacta sobre el tema. En que ocasiones, para que y que significado tiene en Python hacer :

if __name__ == "__main__"

:)

Gracias.
#843
Hola.

Aunque no te he comprendido 100% tu solicitud (Asumo que igual que el resto juas  :xD )
quiero intentar ayudar  :rolleyes:

Tu peticion si puede realizarse enteramente dentro de MySQL sin problema alguno, pero ojo con esto porque tus peticiones requeriran mucho consumo de RAM dependiento el tamanio que utilizaras para ir comparando valor por valor (Tu entiendes).

Se me ha ocurrido lo siguiente, Tengo 2 tablas :

Código (sql) [Seleccionar]


mysql> select * from original;
+--------+---------------+
| codigo | nombres       |
+--------+---------------+
|      1 | Luis Castro   |
|      1 | Pedro Sanchez |
|      1 | Maria Lopez   |
|      1 | Juan Veinte   |
|      1 | Pepe Carlos   |
+--------+---------------+
5 rows in set (0,00 sec)

mysql> select * from archivo;
+---------------+--------+
| palabra       | codigo |
+---------------+--------+
| Pedro Sanchez |      1 |
| Marcia Mama   |      1 |
| Juan Veinte   |      1 |
| Pepe Carlos   |      1 |
+---------------+--------+
4 rows in set (0,00 sec)


Con los datos ahi mostrados. La tabla original es una tabla guardada en motor MyIsam y la tabla archivo es una tabla guardada en motor Memory... la razon que elegi Memory para la segunda es sencillamente que la segunda tabla sera la encargada de alojar los datos que se encuentren en un 'archivo.txt' no quiero registros definitivos, sino temporales y alojados unicamente en la memoria como si fuesen datos dinamicos  ::) por ende la tabla archivo esta en motor Memory. Los datos a la tabla archivo los cargue con el tipico :

LOAD DATA LOCAL INFILE 'ruta/archivo' INTO archivo;

prosigo... tenemos las 2 tablas anteriores, ahora yo quiero guardar en alguna parte dentro de la DB los valores en modo real que vayan insertandose en la tabla archivo y concuerden con la tabla original, entonces hago una vista ::

Código (sql) [Seleccionar]


mysql> create view Ceros as select strcmp(palabra, nombres) as total from original inner join archivo having(total) = 0;
Query OK, 0 rows affected (0,00 sec)



la funcion STRCMP funciona igual que en lenguajes C por ende no creo que deba explicarla mucho, pero si te sirve cuando 2 campos comparados son identicos dicha funcion devuelve valor cero, y como en este caso a mi solo me interesan los valores identicos agrego el predicado having igualandolo a cero, asi solo recogos todos los datos identicos en la comparacion  ;)  para gastar menos memoria a la hora de devolver lol...

Ahora viene la mejor parte del asunto :) cree un procedimiento almacenado, para buscar tu objetivo final (Que hayan mas de 70% de registros similares entre ambas tablas)

Código (sql) [Seleccionar]


mysql> delimiter $
mysql> create procedure proceso(out palabra char(15), out resultado int)
    -> begin
    -> declare valor_original integer;
    -> declare valor_similar integer;
    -> select count(total) into valor_similar from Ceros;
    -> select count(*) into valor_original from original;
    -> select substr((valor_similar/valor_original)%100, 3, 2) into resultado;
    -> if ( resultado > 70 ) then
    -> select concat('Hay un 71% o mayor de similares');
    -> else
    -> select concat('Hay un menor de 70% de similares');
    -> end if;
    -> end;
    -> $
Query OK, 0 rows affected (0,00 sec)

delimiter> ;



Perfecto... ahora el procedimiento lo que hace es siempre recoger los valores totales iguales en la vista Cero (Que al ser una vista siempre estara actualizada en tiempo real a cualquier proceso DDL o DML que se apliquen en ambas tablas  ;) ) y basados en dicho resultados, dividido entre el total de todos los registros que componen la tabla original y sacando un porciento, tendremos un resultado :) en este caso solo tenemos 5 valores identicos a la tabla original que contiene 8 registros por lo que si llamamos al procedimiento proceso tendremos :

Código (sql) [Seleccionar]


mysql> call proceso(@todo, @todito);
+--------------------------------------------+
| concat('Hay un menor de 70% de similares') |
+--------------------------------------------+
| Hay un menor de 70% de similares           |
+--------------------------------------------+
1 row in set (0,00 sec)

Query OK, 0 rows affected (0,00 sec)




Pero si le agregamos mas registros similares a ambas tablas, y luego volvemos a llamar al procedimiento tendriamos ::

Código (sql) [Seleccionar]


mysql> call proceso(@todo, @todito);
+-------------------------------------------+
| concat('Hay un 71% o mayor de similares') |
+-------------------------------------------+
| Hay un 71% o mayor de similares           |
+-------------------------------------------+
1 row in set (0,01 sec)

Query OK, 0 rows affected (0,01 sec)

mysql> select count(total) from Ceros;
+--------------+
| count(total) |
+--------------+
|            8 |
+--------------+
1 row in set (0,00 sec)

mysql> select count(*) from original;
+----------+
| count(*) |
+----------+
|       11 |
+----------+
1 row in set (0,01 sec)




Vas captando mas o menos lo que intento decir  :silbar:

No se si te sirva... espero que si, recuerda que la tabla archivo al estar en motor memory si reinicias, o apagas la DB todos los datos seran eliminados (ya que solo se alojan temporalmente en la memoria ram, asi sacas mas provecho del espacio de ram y accesa mas rapido a los registros).... pero yo te recomendaria que crees un evento CREATE EVENT dentro de MySQL que cada cierto tiempo haga un TRUNCATE a la tabla archivo o cada vez que vayas a LOAD DATA LOCAL INFILE un archivo nuevo le pases un TRUNCATE primero, seguido de un FLUSH TABLES para que limpies la Cache en caso de que uses Cache (Que no te la recomendaria ya que darias mucho uso constante de TRUNCATE) en caso que no uses Cache, pasa cada cierto tiempo un RESET ayuda para desfragmentar...

Intenta si vas a guardar solo caracteres separados de menor de 255 que sean char, ya que longtext o blob o text o similar... la verdad, consume mucho espacio innecesario de memoria y si no vas a dar uso de datos binarios no vale la pena.

Un saludo :)
#844
Scripting / Re: activeperl en ubuntu
3 Agosto 2009, 19:44 PM
Activeperl es para Windows... para sistemas compatibles POSIX esta ya el interprete perl, que por defecto viene con cualquier distribucion Unix o tipo Unix. No puedo asegurarte si viene o no en Ubuntu puesto que Ubuntu viene totalmente vacio en cuanto a librerias y aplicaciones... escribe perl en una terminal para ver si esta, si te dice command not found, entonces procede a instalarlo:

bash$ apt-get install perl
#845
PHP / Re: Ordenar registros
24 Julio 2009, 17:37 PM
Esta super :)

usar oder by sin ninguna condicion por defecto se coloca el orden de registro ascendente. Ahora en relacion a la estructura de tu tabla (Que no digo que este mal) solo en tu caso no estas utilizando ninguna de las formas de normalizacion que implica diseno de tabla (Pero obviare esa parte eres un desarrollador no un DBA)

pero de consejo seria recomendable al menos usar la forma de normalizacion numero uno, no dejes registros con valores nulos por defecto esto relantiza la busquedad en las tablas a la hora de consultas   ;) las DB relacionales guardan direccion en memoria para un tipo de dato primitivo (int, char, varchar, decimal, etc...) sin embargo NULL no pertenece a un tipo de dato del cual se reservo espacio para el... Asigna un valor por default a cada registro en caso que vayan a dejar nulos.

Varchar(255)... bueno es lo estandar, pero recuerda que varchar guarda datos texto de tamano variable.. imagina que de esos 255 solo se inserte 80 caracteres en 1 registro, luego en la segunda insercion 125 caracteres, luego en otra insercion 200 caracteres.... al varchar ser de tamano variable quedan registros de distintos tamanos reservados en memoria, sin embargo datos tipo char de 255 insertas data de 80, 20, 200 caracteres y el resto es rellenado de ceros :) por ende le saca ventaja al espacio asignado, y es mas optimizado y estable char que varchar.. pero para gustos.

#846
Los mayorcitos lamentablemente ya tenemos que trabajar, tenemos responsabilidades encima y poco tiempo para poder pasarnos mas de 10 horas jugando con un troyano para molestar al vecino.

He ahi la diferencia, aprovechen sus años de juventud que cuando entren a la universidad se vean obligados a trabajar, los padres se liberan de ti... ya no queda casi mas tiempo de diversion.
#847
Algo que debes tener en cuenta chico antes de proseguir:

Para uso de llave foraneas:

* Las 3 tablas en este caso deben estar en motor InnoDB.
* Los datos de relacion entre llaves foraneas he indice de la tabla padre
deben ser del mismo tipo y del mismo tamanio.

--- Tu Error se debe a lo siguiente ---



EL motor InnoDB requiere explicitamente, que los indices utilizados como llaves foraneas o los registros de la tabla padre usados como relacion TENGAN UN INDICE CON NOMBRE!



Leyendo lo anterior y teniendolo siempre en cuenta, tu problema se resuelve con :::

Código (sql) [Seleccionar]


create table conferencias(
exp_id int not null auto_increment,
temas varchar(20) not null,
desc_corta varchar(30) not null,
total_part int not null,
costo decimal(5,2) ,
horario datetime not null,
lugar varchar(10) not null,
primary key (exp_id,temas,costo)
) engine = InnoDB;


create table expositores(
exp_id int,
Nombre varchar(12) not null,
ApellidoP varchar(12) not null,
ApellidoM varchar(12) not null,
Fecha_Nac datetime not null,
salario decimal(6,2) not null,
index indice (exp_id),
foreign key (exp_id) references conferencias (exp_id)
) engine = InnoDB;


create table precios(
temas varchar(20) not null ,
costo decimal(5,2) ,
precio_dsc varchar(10) ,
index indice_dos(temas),
foreign key (temas) references conferencias (temas)
) engine = InnoDB;




O sencillamente crea el indice en la tabla padre:

Código (sql) [Seleccionar]


create table conferencias(
exp_id int not null auto_increment,
temas varchar(20) not null,
desc_corta varchar(30) not null,
total_part int not null,
costo decimal(5,2) ,
horario datetime not null,
lugar varchar(10) not null,
constraint PK_Llave primary key (exp_id,temas,costo)
) engine = InnoDB;



La proxima vez que te salga este tipo de errores, sino encuentras solucion en google, y tus tablas estan en motor InnoDB ejecuta en MySQL:

mysql> SHOW INNODB STATUS;

Y busca entre toda esa info donde diga

------------------------
LATEST FOREIGN KEY ERROR
------------------------

Y el detalle del mismo :)  Para ejecutar esa consulta tu usuario debe tener privilegios PROCESS
#848
Karman cielo nadie esta diciendo que no sabes para que sirve GROUP o DISTINCT, lo que tratabamos de decirte es que aun tu peticion no nos queda claro.

Analisando tu propuesta primera, dices que quieres todos los registros del campo data que contengan el sid = 1 aunque no especificamente pertenezcan a un eid especifico mas tu no quieres que se repita ni la data ni el eid?

Porque mira una formita de hacerlo, acorde a tu ejemplo inicial.

Código (sql) [Seleccionar]


mysql> select distinct(data), eid, sid from ejemplo group by(eid);
+-----------+------+------+
| data      | eid  | sid  |
+-----------+------+------+
| lara lara |    1 |    1 |
| asdfasdf  |    2 |    1 |
| qewrqer   |    3 |    1 |
+-----------+------+------+
3 rows in set (0,00 sec)



Esta es la tabla creada por mi para recrear tu escenario :

Código (sql) [Seleccionar]


mysql> select * from ejemplo;
+------+------+-----------+
| eid  | sid  | data      |
+------+------+-----------+
|    1 |    1 | lara lara |
|    1 |    1 | qewrqer   |
|    2 |    1 | asdfasdf  |
|    2 |    1 | lara lara |
|    3 |    1 | qewrqer   |
|    3 |    0 | zxcvzcv   |
+------+------+-----------+
6 rows in set (0,38 sec)



Dime si estamos mas cerca de tu peticion?
#849
Karman, los amigos aca tienen razon... tu solicitud esta un poco confusa de comprender  :-\  al menos yo estoy en el limbo, corrigeme sino es esto lo que deseas.

Hasta lo poco que he podido entender, tu lo que quieres es, sacar todos los registros de la tabla ejemplo que haz posteado, y que dicho registros no se repitan? Si esto es asi analiza un poco la situacion puesto, que tienes 3 campos donde en eid se pueden repetir, mas en data no, o si matcheas con no repetir los registros de data se repetiran los de eid... He realizado un escenario similar al tuyo.

Código (sql) [Seleccionar]


+------+------+-----------+
| eid  | sid  | data      |
+------+------+-----------+
|    1 |    1 | lara lara |
|    1 |    1 | qewrqer   |
|    2 |    1 | asdfasd   |
|    2 |    1 | lara lara |
|    3 |    1 | qewrqer   |
|    3 |    0 | zxcvzcv   |
+------+------+-----------+
6 rows in set (0.00 sec)



Ok mira lo que ocurre si agrupo (Para evitar repetidos) por el campo eid.

Código (sql) [Seleccionar]


+------+------+-----------+
| eid  | sid  | data      |
+------+------+-----------+
|    1 |    1 | lara lara |
|    2 |    1 | asdfasd   |
|    3 |    1 | qewrqer   |



Si agrupamos por data mira que pasaria :

Código (sql) [Seleccionar]


+------+------+-----------+
| eid  | sid  | data      |
+------+------+-----------+
|    1 |    1 | lara lara |
|    1 |    1 | qewrqer   |
|    2 |    1 | asdfasd   |
|    3 |    0 | zxcvzcv   |
+------+------+-----------+
4 rows in set (0.00 sec)




Vas captando la idea con GROUP?  de igual manera si hablamos de DISTINCT, uno de los campos sera los que no se repetiran si utilizas estas clausulas, aunque todavia no entiendo 100% lo que intentas realizar....

Disculpa mi nivel que no logre entender del todo.
#850
PHP / Organizar Tabla HTML
25 Abril 2009, 07:14 AM
Hola.

Tengo un sencillo hasta el momento formulario en Html lo unico que hace es tener un textbox para que el usuario inserte la palabra a buscar en la base de datos. Bien tengo el archivo PHP que recibe los datos del formulario html :

Código (php) [Seleccionar]


require_once("requisito.php");

class Seleccion extends Rosa {

public function Conectando() {

$varia = $_POST['palabra'];

try {

if ( $conexión = mysql_connect($this->servidor, $this->usuario, $this->contrasena) ) {
mysql_select_db("primaria", $conexión);

$consulta = mysql_query("SELECT * FROM ejemplo WHERE nombres LIKE '$varia%'", $conexión) or die(mysql_error());

if ( mysql_num_rows($consulta) == 0 ) {

echo "No hay datos\n";

}

/* Aca en este Punto me imprime la tabla primero lo que esta dentro del bucle While,
    y al finalizar la devuelta de registros, me imprime la cabecera de la tabla */

print "<table border=2><tr><td bgcolor='red'>TITULO</td><td bgcolor='gray'>NOMBRES</td></tr>";

while ($registros = mysql_fetch_array($consulta, MYSQL_NUM)) {
print "<td bgcolor='orange'>$registros[0]</td><td  bgcolor='blue'>$registros[1]</td></tr>";

}
print "</table>";

mysql_free_result($consulta);

} else {

throw new Exception("Error al consultar\n");

}


} catch ( Exception $e ) {

print $e->getMessage();

}

}

function __destruct() {

$this->servidor = null;
$this->usuario = null;
$this->contrasena = null;

}

}

$personas = new Seleccion();
$personas->Conectando();




Como indico dentro del codigo en la linea del While, al imprimirme los resultados en una web, me salen primero los registros devueltos encontrados en la tabla y luego al final me pone la cabecera de la Tabla  :-\  no deberia funcionar al inverso? puesto que declaro la tabla primero que el bucle while....? O estoy obviando algo...