Tema: Optimizacion
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2004, 13:19
Avatar de Reynier
Reynier
 
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pregunta Optimizacion

Miren este código y diganme si se puede optimizar más o así esta bueno. A partir de esas funciones estoy creando mi foro.
Código PHP:
function Foro(){
  if(isset(
$_GET['foro']) && $_GET['foro']=="all"){
   
$query "SELECT cf.* FROM catforos cf WHERE cf.active<>0 ORDER BY cf.presentation_order ASC";
   
$result mysql_query($query) or die("No se ha podido ejecutar la consulta ".$query.". Error: ".mysql_error());
   if(
mysql_num_rows($result)!=0){
    echo 
"<table width='100%'  border='0' cellpadding='0' cellspacing='1' bordercolor='#003366' class='table'>
         <tr><td width='62%' class='forotema' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>Foro</td>
         <td width='11%' class='forotema center'>Mensajes</td><td width='8%' class='center forotema'>Temas</td>
         <td width='19%' class='center forotema'>Último mensaje </td></tr>"
;
    while(
$fetch=mysql_fetch_assoc($result)){
     echo 
"<tr>
           <td colspan='4' class='txt forotema' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>"
.$fetch['title']."</td>
           </tr><tr><td colspan='4' class='txt'>"
;
     
# Llamada a la función para mostrar los Foros
     
Topics($fetch['idcat']);
     echo 
"</td></tr>";
    }
    echo 
"<tr><td colspan='5' class='center forobottom' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>Foro diseñado por <a href='http://reynierpm.variosweb.com/index.php?action=show&".SID."'>ReynierPM Online</a> - &copy; Todos los derechos reservados </td></tr>
          <tr><td colspan='5' class='center forobottom' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>Versión 1.0.0a :: Acerca de ReynierPM Online Foro</td></tr>
          </table>"
;
   }else{
    echo 
"No hay categorías disponibles en el Forum para mostrar";
   }
  }else{
   
# Llamada a la función para mostrar los Post
   
Post($_GET['foro']);
  }
 }

# Mod: Mostrar subforos
 
function Topics($idcat){
  if(isset(
$_GET['foro']) && $_GET['foro']=="all"){
   
$query "SELECT fr.* FROM foros fr WHERE  fr.idcat='".$idcat."' AND fr.active<>0 ORDER BY fr.idforo";
   
$result mysql_query($query) or die("No se ha podido ejecutar la consulta ".$query.". Error: ".mysql_error());
   if(
mysql_num_rows($result)!=0){
    echo 
"<table width='100%'  border='0' cellpadding='0' cellspacing='1' bordercolor='#003366'>";
    while(
$fetch=mysql_fetch_assoc($result)){
     
# Consulta para calcular la cantidad de post
     
$sub_query "SELECT idpost,count(idpost) as cant,date, DAYOFMONTH(date) AS dia, DAYOFWEEK(date) AS semana, MONTH(date) AS mes, YEAR(date) AS year, DATE_FORMAT(date,'%h:%i %p') AS hora FROM post WHERE idforo='".$fetch['idforo']."' AND idcat='".$idcat."' group by idcat ORDER BY date ASC";
     
$sub_result mysql_query($sub_query) or die("No se ha podido ejecutar la consulta ".$sub_query.". Error: ".mysql_error());
     
$res mysql_fetch_assoc($sub_result);
     
# Consulta para calculara la cantidad de mensajes
     
$sub_sub_query "SELECT count(idreply) as cant FROM reply WHERE idforo='".$fetch['idforo']."' AND idcat='".$idcat."' AND idpost='".$res['idpost']."'";
     
$sub_sub_result mysql_query($sub_sub_query) or die("No se ha podido ejecutar la consulta ".$sub_sub_query.". Error: ".mysql_error());
     
$res_res mysql_fetch_assoc($sub_sub_result);
     
# Fecha del último post
     
if($res['date']==""){
      
$lastpost "No hay nigún mensaje";
     }else{
      
$nombre_meses = array("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic");
      
$dias_semana = array("Dom","Lun","Mar","Mie","Jue","Vie","Sab");
      
$lastpost $dias_semana[$res['semana']-1]." ".$res['dia']." ".$nombre_meses[$res['mes']-1]." ".$res['year']." ".$res['hora'];
     }
     
# Obtenemos la cantidad de temas disponibles para ese Post, Foro y Categoria
     
if(mysql_num_rows($sub_sub_result)){
      
$themes $res_res['cant'] + $res['idpost'];
     }else{
      
$themes 0;
     }
     
# Obtenemos el numero de mensajes disponibles en ese foro y categoria
     
if(mysql_num_rows($sub_result)!=0){
      
$post $res['cant'];
     }else{
      
$post 0;
     }
     echo 
"<tr><td width='2%' rowspan='2' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'><div align='center'><a href='foros.php?action=show&catforo=".$fetch['idcat']."&foro=".$fetch['idforo']."&".SID."'><img src='images/forum/oldtopics.gif' width='27' height='27' border='0' alt='Entrar al Foro ".$fetch['title']."'></a></div></td>
           <td width='57%' class='titleforo td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'><a href='foros.php?action=show&catforo="
.$fetch['idcat']."&foro=".$fetch['idforo']."&".SID."'>".$fetch['title']."</a></td>
           <td width='12%' class='txtcn td'>"
.$post."</td><td width='79' class='txtcn td'>".$themes."</td>
           <td width='19%' class='txtcn td'>"
.$lastpost."</td></tr><tr>
           <td colspan='4' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>"
.$fetch['description']."</td>
           </tr>"
;
    }
    echo 
"</table>";
   }else{
    echo 
"Esta categoría no posee ningún Foro de Discusión";
   }
  }
 } 
jeje he probado optimizar las consultas pero no me va.
El diseño de la BDatos es este:
Cita:
CREATE TABLE `catforos` (
`idcat` int(6) unsigned NOT NULL auto_increment,
`title` varchar(50) NOT NULL default '',
`description` varchar(255) NOT NULL default '',
`presentation_order` bigint(2) default NULL,
`active` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`idcat`)
) TYPE=MyISAM COMMENT='Foros Categories';

CREATE TABLE `foros` (
`idforo` int(6) unsigned NOT NULL auto_increment,
`idcat` int(6) default NULL,
`title` varchar(50) NOT NULL default '',
`description` varchar(255) NOT NULL default '',
`presentation_order` tinyint(2) default NULL,
`active` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`idforo`)
) TYPE=MyISAM COMMENT='Foros';


CREATE TABLE `post` (
`idpost` int(6) unsigned NOT NULL auto_increment,
`idtopic` int(6) default NULL,
`idcat` int(6) default NULL,
`idforo` int(6) default NULL,
`iduser` int(6) default NULL,
`type` tinyint(1) NOT NULL default '0',
`subject` varchar(200) NOT NULL default '',
`text` text NOT NULL,
`date` datetime default NULL,
PRIMARY KEY (`idpost`)
) TYPE=MyISAM COMMENT='Post for Topics';


CREATE TABLE `reply` (
`idreply` int(6) unsigned NOT NULL auto_increment,
`idpost` int(6) default NULL,
`idcat` int(6) default NULL,
`idforo` int(6) default NULL,
`iduser` int(6) default NULL,
`subject` varchar(50) NOT NULL default '',
`text` text NOT NULL,
`date` datetime default NULL,
PRIMARY KEY (`idreply`)
) TYPE=MyISAM COMMENT='Replies for Post';
Salu2
__________________
Ing. Reynier Pérez Mira