Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: luis108 en 21 Mayo 2012, 00:33 am



Título: Ayudenme con BD
Publicado por: luis108 en 21 Mayo 2012, 00:33 am
Holas a todos miren toy haciendo una pagina de musica en php y base de datos pero tengo un problema cuando pongo este codigo para llamar alos artistas se demora como 2 minutos para aparecer depende del genero que escoja supongamos escojo reggaeton y demora porque tengo como 300 artistas :S.. toy con host de pago hostgator

Citar
<?php
if (!empty($genero)) {
$respuesta_art = @mysql_query("SELECT artista,genero FROM artistas where genero = '".$genero."' ORDER BY artista");
}elseif(!empty($letra)){
if($letra == "1" || "2"){
$respuesta_art = @mysql_query("SELECT artista,genero FROM artistas WHERE artista RLIKE '^[".$letra."]' ORDER BY artista ASC");
}else{
$respuesta_art = @mysql_query("SELECT artista,genero FROM artistas WHERE SUBSTRING(artista,1,1) = '".$letra."'");
}
}else{
$respuesta_art = @mysql_query("SELECT * FROM artistas ORDER BY RAND() LIMIT 40");
}
## Imprimir
while ($row = mysql_fetch_array($respuesta_art))
{
$resul = mysql_query("SELECT * FROM canciones WHERE artista = '".$row[artista]."'");
$numerorows = mysql_num_rows($resul);
$conteo++;
if ($conteo==1){echo '<div id="capa1" class=visible>';}
if ($conteo==41){echo '</div><div id="capa2" class=Novisible>';}
if ($conteo==81){echo '</div><div id="capa3" class=Novisible>';}
if ($conteo==121){echo '</div><div id="capa4" class=Novisible>';}
if ($conteo==161){echo '</div><div id="capa5" class=Novisible>';}
// Variables arreglados con signos
$gen=strtolower(str_replace(" ","-",$row[genero]));
$art=strtolower(str_replace(" ","-",$row[artista]));
#Imprimir
echo"<li><a href=\"./".$gen."/".$art."/\" title=\"".ucwords($row[artista])."\">".ucwords($row[artista])."</a></li>";
}
?>

y tambien ayudenme con esto para otro sistema..

yo con esto llamo alas variables generales

Citar
<?php
include("includes/config.php");
//Asignando Variables ;} x Luisitoz
$dir_gen = "gns/"; 
$GenGet = (!empty($_GET['genero']) ? $_GET['genero'] : "reggaeton");
$ext = ".php"; //extension de la listas
$ArtGet =  ($_GET['genero']);
$ideCan =  ($_GET['cancion']);
$artista = ucwords(str_replace("-", " ", $_GET['artista']));
$cancion = str_replace("-", " ", $_GET['cancion']);
$letra = str_replace("-", " ", $_GET['letra']);
//Fin De Varibles
?>

y para que muestre los generos en php le puse esto que funciona de maravilla

Citar
<?php
if(file_exists($dir_gen.$GenGet.$ext))
{
include($dir_gen.$GenGet.$ext);
}
else
{
echo "<div align=\"left\" id=\"artista\"><ul><li><a href=\"$direccion\" title=\"Escucha Musica Online Gratis ! HOGARMUSICAL.com\">Musica de Inicio !</a></li></ul></div>";
}
?>

pero el problema ocurre cuando le pongo esto codigo ya no me aparece x default lo que puse que seria "reggaeton"

Citar
<?
if(isset($_GET['letra']))
{
if(file_exists($dir_gen.$letra.$ext))
{
include($dir_gen.$letra.$ext);
}
else
{
echo "<div align=\"left\" id=\"artista\"><ul><li><a href=\"$direccion\" title=\"Escucha Musica Online Gratis ! HOGARMUSICAL.com\">Musica de Inicio !</a></li></ul></div>";
}
}else if(isset($_GET['genero']))
{
if(file_exists($dir_gen.$GenGet.$ext))
{
include($dir_gen.$GenGet.$ext);
}
else
{
echo "<div align=\"left\" id=\"artista\"><ul><li><a href=\"$direccion\" title=\"Escucha Musica Online Gratis ! HOGARMUSICAL.com\">Musica de Inicio !</a></li></ul></div>";
}
}
?>


Título: Re: Ayudenme con BD
Publicado por: WarGhost en 21 Mayo 2012, 02:15 am
Es normal que te tarde tanto, estas haciendo muchísimas consultas, en un host compartido siempre te ira lento ya que limitan las consultas, si quieres usar ese algoritmo lo mejor que puedes hacer es un sistema de cacheo para no tener que hacer todas las peticiones cada vez que un usuario visita la web, y asi solo lo haces 1 vez al día o como prefieras configurarlo.

Otra forma seria replantearte el algoritmo entero y buscar algún modo de no hacer tantas peticiones.

Tip: Siempre que no sea 100% imprescindible, no hagas consultas dentro de un bucle, ya que esto ralentizara mucho tu sistema.
Tip2: Organiza bien tu base de datos, mysql es un gestor de bases de datos muy potente, pero si no esta bien organizado ni estructurado puede llegar a ser muy lento con bases de datos muy grandes, con lo cual te recomiendo que utilices indices.
Tip3: después de que terminar de hacer cada consulta, utiliza mysql_free_result, así liberaras la memoria que ya no necesitas.
Tip4: Haz tu código lo mas legible posible, utiliza el tabulador para ordenador tu código y utiliza camelCase para nombrar tus funciones, esto hara que a la hora de pedir ayuda en algunos de tus códigos sea mas fácil de entender para otros programadores.