Comunidad de diseño web y desarrollo en internet online

Ayuda, estoy haciendo un foro y estoy atascado!!

Citar            
MensajeEscrito el 09 May 2010 11:26 pm
Hola, no soy capaz de sacar el numero de mensajes por tema.
Tengo hechas 3 tablas:
CATEGORIAS (id_categoria, nombre, descripcion),
TEMAS (id_tema, descripcion, categoria, autor, fecha),
MENSAJES (id_mensaje, mensaje, categoria, tema, acutor, fecha).

Con este codigo me sale en todos los temas el numero total de mensajes que hay en esa categoría, pero lo que quiero sacar es dentro de esa categoría los que hay por cada tema.

Ayudaaaaa

Código PHP :

<?php require_once('Connections/foro.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$maxRows_temas = 20;
$pageNum_temas = 0;
if (isset($_GET['pageNum_temas'])) {
  $pageNum_temas = $_GET['pageNum_temas'];
}
$startRow_temas = $pageNum_temas * $maxRows_temas;

$colname_temas = "-1";
if (isset($_GET['cat'])) {
  $colname_temas = $_GET['cat'];
}

mysql_select_db($database_foro, $foro);
$query_temas = sprintf("SELECT * FROM temas WHERE categoria = %s ORDER By fecha DESC", GetSQLValueString($colname_temas, "int"));
$temas = mysql_query($query_temas, $foro) or die(mysql_error());
$row_temas = mysql_fetch_assoc($temas);
$totalRows_temas = mysql_num_rows($temas);

mysql_select_db($database_foro, $foro);
$query_categorias = sprintf("SELECT * FROM categorias WHERE id_categoria = %s", GetSQLValueString($colname_temas, "int"));
$categorias = mysql_query($query_categorias, $foro) or die(mysql_error());
$row_categorias = mysql_fetch_assoc($categorias);
$totalRows_categorias = mysql_num_rows($categorias);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>..:: FOROS PROGRAMACI&Oacute;N ::..</title>
<link rel="stylesheet" href="estilos.css" type="text/css" />
<script src="Scripts/scripts.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>

<body onload="MM_preloadImages('imagenes/inicioON.png','imagenes/entrarON.png','imagenes/registrateON.png','imagenes/salirON.png')">
<div id="capa_superior_total">
<div id="capa_logo"><a href="index.php" target="_self"><img src="imagenes/logo.png" alt="Foros programacion" width="300" height="100" border="0" /></a></div><div id="capa_superior"></div><div id="capa_superior_drc"></div><br /></div>
        <div id="capa_menu"><img src="imagenes/15x5px.png" width="15" height="5" /><a href="index.php" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Inicio','','imagenes/inicioON.png',1)"><img src="imagenes/inicioOFF.png" name="Inicio" width="100" height="30" border="0" id="Inicio" /></a><a href="entrar.php" target="_self" onmouseover="MM_swapImage('Entrar','','imagenes/entrarON.png',1)" onmouseout="MM_swapImgRestore()"><img src="imagenes/entrarOFF.png" name="Entrar" width="100" height="30" border="0" id="Entrar" /></a><a href="usuario_nuevo.php" target="_self" onmouseover="MM_swapImage('registrate','','imagenes/registrateON.png',1)" onmouseout="MM_swapImgRestore()"><img src="imagenes/registrateOFF.png" name="registrate" width="100" height="30" border="0" id="registrate" /></a><a href="salir.php" target="_self" onmouseover="MM_swapImage('salir','','imagenes/salirON.png',1)" onmouseout="MM_swapImgRestore()"><img src="imagenes/salirOFF.png" name="salir" width="100" height="30" border="0" id="salir" /></a></div>
        <div id="capa_principal3">
        <div class="capa_separador"></div>
        <div class="capa_navegador"><br />
        <img src="imagenes/40x5px.png" width="40" height="5" /><span id="navegador"><a href="index.php" target="_self">
        Inicio</a> &gt; <?php echo $row_categorias['nombre']; ?></span></div>
        <div id="capa_categorias">
<table class="table_foros" width="950" align="center">
  <tr>
    <td colspan="2" bgcolor="#000033"><img src="imagenes/48x5px.png" width="48" height="5" />TEMAS</td>
    <td width="120" align="center" bgcolor="#000033">PUBLICACIONES TOTALES</td>
    <td width="150" align="center" bgcolor="#000033">AUTOR</td>
    <td width="100" align="center" bgcolor="#000033">FECHA</td>
  </tr>
  <?php do { ?>
  <tr>
    <td width="45" align="center"><img src="imagenes/folder.png" width="40" height="40" /></td>
    <td width="389" align="left"><span class="table_foros_fechas"><a href="mensajes.php"><?php echo $row_temas['descripcion']; ?></a></span><br /></td>
    <td align="center"><span class="table_foros_fechas">&nbsp;</span></td>
    <td align="center"><span class="table_foros_autores"><?php echo $row_temas['autor']; ?></span></td>
    <td align="center"><span class="table_foros_fechas"><?php echo $row_temas['fecha']; ?></span></td>
  </tr>
  <?php } while ($row_temas = mysql_fetch_assoc($temas)); ?> 
</table>
</div>
</div>

</body>
</html>
<?php
mysql_free_result($temas);

mysql_free_result($categorias);
?>

Por abuitrago

0 de clabLevel



 

msie8
Citar            
MensajeEscrito el 10 May 2010 02:21 am
resume tu post no necesito enterarme de todo tu codigo, solo de la parte que te da problemas


lo mas probable es que tengas mal echas las consultas SQL
para que explicas se debe hacer una consulta cruzada entre tema y comentarios, luego agrupar portema y contar los mensajes, algo asi como:

Código MySQL :

SELECT COUNT(m.`id_mensaje`) mensajesXtema
FROM tema t 
LEFT JOIN mensajes m ON t.`id_tema` = m.`id_tema` 
WHERE t.`id_tema` = 1


si no entiendes lo de cruzar consultas lee esto http://www.cristalab.com/tips/consulta-sql-a-mas-de-dos-tablas-con-join-c77632l/

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.