Foros
creacion de bloque ultimas fotos de My_eGallery
Autor Fecha: 21 de Diciembre del 2006 a las 19:11:43   Descripción: creacion de bloque ultimas fotos de My_eGallery
Sin avatar
Sexo: Masculino
Edad: 16 años
Ubicación: Lima - Perú
País:
Mensajes: 16
Hola, bueno habia intentado crear un bloque que muestre las 20 ultimas fotos agregadas en el modulo My_eGallry, pero me di con la gran sorpresa de que el directorio de las categorias y el nombre de los archivos de las imagenes se encontraban en tablas diferentes en la base de datos.
Yo usualmente solia trabajar con una sola y pues al ver esto no sabia que hacer y nose que hacer asi que espero que alguien me ayude porfavor.

Aca les dejo una imagen didactica sobre cual es mi problema y la explicacion abajo de ella.

Lo que quiero es que la imagen llamada, por ejemplo, amargo.gif tiene como categoria el id 3, entonces se cree la direccion asi: varios/amargo.gif.
Individual Perfil Privado Website
Autor Fecha: 22 de Diciembre del 2006 a las 11:20:32   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
rubensaid escribió:
Yo usualmente solia trabajar con una sola y pues al ver esto no sabia que hacer y nose que hacer...


Lo siguiente no lo digo por ti... hay decenas, o quizas miles de personas que hacen bloques y modulos... supuestamente saben, pero se enredan con cosas simples... ello me causa gracia, aunque el asunto va más allá, porque hablan sin saber, y varias de mi creaciones las tratan como si se tratasen de clones de otras (ejemplo: Juegos Online)... y eso me molesta, pero bueno.

Haber, lo que tienes que hacer es algo llamado join sql... se trata de unir el contenido de dos tablas con un query, o en otras palabras, obtener información de una sola vez, pero de diferentes tablas. Solo para facilitarte el entendimiento... join significa unir o unión...

Tu habias mencionado, que estas acostumbrado a hacer un solo query, para obtener información de la bd... eso es algo simple... aunque el join es un tanto más complejo, pero útil e incluso es la base de los foros phpBB...

Hay diferentes tipos de joins, asi que tendrías que escoger el que más se ajuste a tus necesidades... supongo que un left join estaria bien...

Si quieres, puedes postear los dos queries necesarios... y yo realizo el join por ti Paliza

Saludos Muy bien
Individual Perfil Privado Website
Autor Fecha: 23 de Diciembre del 2006 a las 13:10:23   Descripción: es que...
Sin avatar
Sexo: Masculino
Edad: 16 años
Ubicación: Lima - Perú
País:
Mensajes: 16
Hola, primero solo aclarar algo, no quiero que creas que soy un fanfaron o que me jacto de lo que nose. Yo se que mis conocimientos son muy pocos y casi sin fundamentos para explicar lo que hago con los codigos solo dije eso porque deveras nunca habia trabajo con eso de unir tablas.
Respecto a tu trabajo yo no creo que sean clones, al contrario yo pienso que tu debes saber mucho de esto y no dudo de tu capacidad y habilidad, es por eso es que pregunte en estos foros porque se que me puedes ayudar.

Bueno ahora sobre tu post entendi mas o menos, pero me sirvio de algo (el aprender que se podia hacer eso) pero no en el codigo. Aca te dejo el codigo que de hecho esta mal porque nose ni que esoty haciendo hay espero que me ayudes porfavor.

Código
<?php

if &#40;eregi&#40;"block-Ultimas_fotos.php",$_SERVER&#91;'PHP_SELF'&#93;&#41;&#41; &#123;
    Header&#40;"Location&#58; ../index.php"&#41;;
    die&#40;&#41;;
&#125;


global $db, $prefix;

$content = "<marquee behavior='scroll' direction='up' height='200'scrollamount='2' scrolldelay='20' onmouseover='this.stop&#40;&#41;' onmouseout='this.start&#40;&#41;'>";
$resiult = $db->sql_query&#40;"SELECT * FROM ".$prefix."_gallery_categories"&#41;;
while&#40;$srow = $db->sql_fetchrow&#40;$resiult&#41;&#41; &#123;
$bid = intval&#40;$srow&#91;'gallid'&#93;&#41;;
$don = stripslashes&#40;$row&#91;'galloc'&#93;&#41;;

$result = $db->sql_query&#40;"SELECT * FROM ".$prefix."_gallery_pictures ORDER BY pid DESC LIMIT 0,20"&#41;;
while&#40;$row = $db->sql_fetchrow&#40;$result&#41;&#41; &#123;
$id = intval&#40;$row&#91;'pid'&#93;&#41;;
$img = stripslashes&#40;$row&#91;'img'&#93;&#41;;
$name = stripslashes&#40;$row&#91;'name'&#93;&#41;;
$galid = stripslashes&#40;$row&#91;'gid'&#93;&#41;;


$content .= "<img

src="modules/My_eGallery/gallery/$don/$img" border="0" width="140">";
$content .= "$name";

&#125;
&#125;
$content .= "</marquee>";


?>

Creo que ese codigo no se bien aca te dejo el archivo block-Ultimas_fotos.zip

Ayuda porfa
Individual Perfil Privado Website
Autor Fecha: 23 de Diciembre del 2006 a las 13:38:54   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
Jajaja... te dije que eso no lo dije por ti... eso me trajo cosas a la mente y nada más... pero bueno, eso es otra cosa.

Si esta mal... y el código no es bueno... son dos bucles anidados y seguro se ejecutaran muchas veces, quizas ciento... y por cada categoria estas haciendo una llamada a la bd...

Imagina esto, tienes 100 categorias de imagenes y 100 imagenes... el bucle principal se ejecutará 100 veces, y se harán 100 llamadas a la bd (lo cual es demasiado)... encima de hecho el bucle secundario se ejecutará otras 100 veces, ya que son 100 imagenes... haciendo cuentas...

Llamadas a la bd: 101 (1 de bucle principal, 100 del secundario)
Ejecuciones de bucles: 100 x 100 = 10000 (ejecuciones principales del while, por secundarias)

Y las cosas empeoran, pues si ese es un bloque izquierdo... que se vea más que otro... te consumira bastantes recursos, junto con los que consume el php-nuke... 10 usuarios o poco más (depende del servidor), podrian hacer que tu web fuera lento... te llegarian reportes de que tu web consume muchos recursos y que si no haces algo, te suspenderán la web... y bueno... y eso con suerte, porque en servidor gratuito, te podrian cerrar la web.

Eso podria hacerse, con 1 llamada a la bd y no 101... y 100 ejecuciones del bucle while o for, y no 10000... eso es optimización, y hacer bien las cosas. Bailando

En un momento haré el join... Fumador Aclaro, que el join tambien se puede hacer con 2 llamadas a la bd por separado, pero quizas sea aún más complejo, en algunos casos...

Saludos Muy bien
Individual Perfil Privado Website
Autor Fecha: 23 de Diciembre del 2006 a las 14:52:41   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 16 años
Ubicación: Lima - Perú
País:
Mensajes: 16
Contento muchas gracias. Sabia que tu pocias ayudarme Muy bien
Individual Perfil Privado Website
Autor Fecha: 23 de Diciembre del 2006 a las 15:44:52   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
Bueno... espero que este bien, no lo he probado, ni las tablas tengo... y hacerlas pues... naaa Contento

Si no funciona, me das las tablas necesarias... con algunos datos para no batallar metiendo yo...

Código
$bid = intval&#40;$srow&#91;'gallid'&#93;&#41;;
$id = intval&#40;$row&#91;'pid'&#93;&#41;;
$galid = stripslashes&#40;$row&#91;'gid'&#93;&#41;;

La variable $bid no es necesario evaluarla como un entero, debido a que muy probablemente la base de datos tiene sobreentendido que cada dato que vaya en el campo gallid, es un entero, y si no lo es, me parece que pone 0, o el valor por defecto... asi que lo elimino... y le siguen otros datos inecesarios, que por supuesto tambien elimine... tienen tambien sus errores pero bueno...

Haber, lo único que necesitas de nuke_gallery_categories es el campo "galloc" que corresponde al directorio... su id no la necesitas para nada... otra razón más para haber borrado la variable $bid anteriormente mencionada...

Entonces... solo se tienen que enlistar las imagenes requeridas... al parecer 20 y al mismo tiempo se debe obtener el directorio... ok.

Código
<?php

if &#40;eregi&#40;"block-Ultimas_fotos.php",$_SERVER&#91;'PHP_SELF'&#93;&#41;&#41; &#123;
    Header&#40;"Location&#58; ../index.php"&#41;;
    die&#40;&#41;;
&#125;

global $db, $prefix;

$content = "<marquee behavior='scroll' direction='up' height='200'scrollamount='2' scrolldelay='20' onmouseover='this.stop&#40;&#41;' onmouseout='this.start&#40;&#41;'>";

$result = $db->sql_query&#40;"SELECT ngp.name, ngp.img, ngc.galloc FROM ".$prefix."_gallery_pictures AS ngp LEFT JOIN ".$prefix."_gallery_categories AS ngc ON ngp.gip = ngc.gallid ORDER BY ngp.pid DESC LIMIT 0,20"&#41;;

while&#40;$row = $db->sql_fetchrow&#40;$result&#41;&#41; &#123;

    $don = stripslashes&#40;$row&#91;'galloc'&#93;&#41;;
    $img = stripslashes&#40;$row&#91;'img'&#93;&#41;;
    $name = stripslashes&#40;$row&#91;'name'&#93;&#41;;

    $content .= "<img src="modules/My_eGallery/gallery/$don/$img" border="0" width="140">";
    $content .= $name;

&#125;

$content .= "</marquee>";

?>

Saludos Muy bien
Individual Perfil Privado Website
Autor Fecha: 26 de Diciembre del 2006 a las 19:48:30   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 16 años
Ubicación: Lima - Perú
País:
Mensajes: 16
bueno gracias por tu tiempo y tu comprension.
El codigo no funciona pero ya encontre otra forma mas simple de hacerlo de hacerlo.

Saludos Muy bien
Individual Perfil Privado Website
Autor Fecha: 26 de Diciembre del 2006 a las 20:33:46   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
Jajaja... quizas sea más simple... pero si sigues programando necesitaras aprender a hacer joins...

Mmm... no me sorprende que no funcione, no me diste ningun dato, tuve que tomarlos del bloque, y ve tu a saber si esos datos estaban bien... igualmente ese bloque se pudo haber hecho funcionar, si me hubieras dado lo que necesitaba... las tablas de la base de datos requeridas...

Pero bueno... Aburrido

Edito: Como este post ya fue resuelto, lo cierro... Fumador
Individual Perfil Privado Website