crear una zona de comentarios para la web usando JOIN (php)

Muy buenas.
Haber os comento mi duda, haber si alguien puede hecharme un cable.
Quiero hacer en mi web una zona de comentarios, que ya tenia en dos de las páginas. Pero quiero tener estas zonas de comentarios en todas las páginas de la web.
Hasta ahora lo que hacia es crear dentro de la bbdd tablas distintas para cada sección de la web y funcionaba bien, pero claro si tuviera 100 páginas no voy a crear 100 tablas, no?
Entonces investigando un poco y leyendo vi que era factible el hacer dos tablas
1º esta tabla contendria un intContador (ID) y intCategoria.
En el intCategoria iria las distintas secciones que tendria la web ejemplo (index, servicios, productos, etc.)
2ª esta tabla tendria los campos intContador y el campo strTexto(aqui se almacenaria el comentario de las personas).
Hasta aqui todo claro.
Lei que haciendo uso de JOIN ejemplo:
SELECT * FROM direcciones. AS dir
JOIN países AS p ON p.país = dir.pais
WHERE … cualquier condicion
podemos relacionar las dos tablas y hacer que mediante esta consulta te mostre los datos que le indiques de las dos tablas.
Mi duda y es el motivo de este post es como debo de hacer la inserción de los datos para que cuando alguien inserte un comentario a través de la pagina servicios y solo en esa, se vuelque la información del comentario en esa fila de la tabla.
Y luego como hacer que se muestre ese comentario.
Espero haberme explicado bien y que alguien me pueda ayudar.
un saludo
Hola:

La inserción de los datos es igual que en cualquier otra tabla: INSERT INTO tabla SET columna = valor, columna = valor (o la otra forma INSERT INTO tabla (columnas) VALUES (valores)). La única diferencia es que tendrás que hacer un insert por cada tabla, o sea, dos. La forma de leer la información es lo que cambia :D.

El problema para mostrar los comentarios sólo de una sección no esta relacionado a cómo insertarlos, sino que es la base de datos la que debe estar bien relacionada.

Según lo que planteas en tu post, estas serían las tablas:

CREATE TABLE category (
  category_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  category_name VARCHAR(200) NOT NULL
) ENGINE=InnoDB CHARSET=utf8;

CREATE TABLE comments (
  comment_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  comment TEXT,
  category_id INT(11) UNSIGNED NOT NULL
) ENGINE=InnoDB; CHARSET=utf8;

ALTER TABLE comments ADD CONSTRAINT fk_comments_ref_category FOREIGN KEY (category_id) REFERENCES category (category_id) ON UPDATE CASCADE ON DELETE CASCADE;

Nota: ejecuta en ese orden las consultas, sino no funcionará.

Esa es la estructura para que funcione correctamente. Ahora, para leer la información, harías esto:

SELECT * FROM category
LEFT JOIN comments USING (category_id);

Eso mostrará todos los datos mezclados y sin repetir. Para mostrar sólo los comentarios de una categoría, entonces harás esto:

SELECT * FROM category
LEFT JOIN comments USING (category_id)
WHERE category_name = 'nombre_categoría';

Saludos.
skaparate escribió:Hola:

La inserción de los datos es igual que en cualquier otra tabla: INSERT INTO tabla SET columna = valor, columna = valor (o la otra forma INSERT INTO tabla (columnas) VALUES (valores)). La única diferencia es que tendrás que hacer un insert por cada tabla, o sea, dos. La forma de leer la información es lo que cambia :D.

El problema para mostrar los comentarios sólo de una sección no esta relacionado a cómo insertarlos, sino que es la base de datos la que debe estar bien relacionada.

Según lo que planteas en tu post, estas serían las tablas:

CREATE TABLE category (
  category_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  category_name VARCHAR(200) NOT NULL
) ENGINE=InnoDB CHARSET=utf8;

CREATE TABLE comments (
  comment_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  comment TEXT,
  category_id INT(11) UNSIGNED NOT NULL
) ENGINE=InnoDB; CHARSET=utf8;

ALTER TABLE comments ADD CONSTRAINT fk_comments_ref_category FOREIGN KEY (category_id) REFERENCES category (category_id) ON UPDATE CASCADE ON DELETE CASCADE;

Nota: ejecuta en ese orden las consultas, sino no funcionará.

Esa es la estructura para que funcione correctamente. Ahora, para leer la información, harías esto:

SELECT * FROM category
LEFT JOIN comments USING (category_id);

Eso mostrará todos los datos mezclados y sin repetir. Para mostrar sólo los comentarios de una categoría, entonces harás esto:

SELECT * FROM category
LEFT JOIN comments USING (category_id)
WHERE category_name = 'nombre_categoría';

Saludos.
Buenos dias.
Antes de nada darte las gracias por la ayuda prestada, de verdad.
Voy a probarlo ahora mismo haber si por fin me quito de tanta historia para la zona de comentarios.
Muy buenas esto es lo que estoy intentando hacer para la zona de comentarios de la web tal y como te comete.
Estructura de tabla para la tabla `tblcategorias`
CREATE TABLE IF NOT EXISTS `tblcategorias` (
  `id` int(10) unsigned NOT NULL,
  `categoria` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Estructura de tabla para la tabla `tblcomentario`
CREATE TABLE IF NOT EXISTS `tblcomentario` (
  `id` int(10) unsigned NOT NULL,
  `co_categoria` varchar(30) NOT NULL,
  `co_nombre` varchar(20) NOT NULL,
  `co_mail` varchar(100) NOT NULL,
  `co_web` varchar(100) NOT NULL,
  `co_comentario` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

para insertar los datos en la tabla
<form method="post" action="enviar-comentario.php?categoria=gente" id="form1" >
    <input type="text" name="nombre" />
    <input type="text" name="mail" />
    <input type="text" name="web" />
    <input type="text" name="msg" />
    <input type="submit" value="enviar" />
</form>

comentario.php
mysql_query("INSERT INTO tblcomentario (co_nombre, co_mail, co_web, co_comentario, co_categoria)
        VALUES ('{$_POST['nombre']}','{$_POST['mail']}','{$_POST['web']}','{$_POST['msg']}','{$_GET['categoria']}')",$conexion);
		if (mysql_errno($conexion))
		{
			echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
			mysql_close($conexion);
		}	else{
			$conexion;
			header("location:index.php");

Y para sacar los comentarios de la sección gente
$rst_oferta=mysql_query("SELECT * FROM tblcategorias LEFT JOIN tblcomentario  WHERE co_categoria = 'gente';",$conexion);
$num_registros=mysql_num_rows($rst_oferta);
if ($num_registros==0)
{
        echo "No hay resultados para mostrar y seguro que ocurrio algo!!";
        mysql_close($conexion);
        exit();
}

Y la verdad que no se donde esta el error ya que estuve probando varias cosas pero no consigo sacarlo.
Si lo que intento es sacar todos los comentarios no hay problema.
$rst_oferta=mysql_query("select co_nombre, co_mail, co_web, co_comentario, co_categoria from tblcomentario join tblcategorias on categoria=co_categoria;",$conexion);
$num_registros=mysql_num_rows($rst_oferta);
if ($num_registros==0)
{
        echo "No existen productos para mostrar";
        mysql_close($conexion);
        exit();
}

<table border="0" cellpadding="0" cellspacing="0" class="tabla">
                <tr>
                	<th>Nombre</td>
                    <th>Email</td>
                    <th>web</td>
                    <th>Comentario</td>
                    <th>Categoria</td>
                </tr>
                <?php
                                while ($fila=mysql_fetch_array($rst_oferta))
                                {
                ?>
                <tr class="modo1">
                	 <th><?php echo $fila ["co_nombre"];?></td>
                    <th><?php echo $fila ["co_mail"];?></td>
                    <th><?php echo $fila ["co_web"];?></td>
                    <th><?php echo $fila ["co_comentario"];?></td>
                    <th><?php echo $fila ["co_categoria"];?></td>
                </tr>
                                <?php
                                }
                ?>
            </table>

Cual es el error?
Haber si acabo de una vez con esto!!
Un saludo
puede ser porque el action del form envia a enviar-comentario.php y el archivo que inserta el registro se llama comentario.php