Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] consulta comentarios por producto

Estas en el tema de consulta comentarios por producto en el foro de PHP en Foros del Web. Hola a todos Existe una lista de productos, en las cuales cada persona hace un comentario de un producto en particular. El punto es que ...
  #1 (permalink)  
Antiguo 12/10/2015, 15:57
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 4 meses
Puntos: 6
Pregunta consulta comentarios por producto

Hola a todos

Existe una lista de productos, en las cuales cada persona hace un comentario de un producto en particular.

El punto es que solo me muestra un comentario, y deberia mostrar los comentarios de cada persona de un producto en particular, En cada producto existira un comentario

Por favor guiarme como seria la consulta correcta para mostrar lo que necesito, gracias, aqui dejo el codigo y las tablas.

Código PHP:
<?
$productosid 
= (int)$_GET['productosid'];
$ADODB_FETCH_MODE ADODB_FETCH_ASSOC;
$conn = &ADONewConnection('mysql');    
$conn->Connect($dbhost,$dbuser,$dbpass,$dbdatabase);
$SQL "SELECT * FROM ".$tabla."productos 
INNER JOIN "
.$tabla."personas ON ".$tabla."productos.personasid=".$tabla."personas.personasid 
INNER JOIN "
.$tabla."modelo ON ".$tabla."productos.modeloid=".$tabla."modelo.modeloid 
INNER JOIN "
.$tabla."marcas ON ".$tabla."productos.marcasid=".$tabla."marcas.marcasid 
INNER JOIN "
.$tabla."comentarios ON ".$tabla."productos.comentid=".$tabla."comentarios.comentid
WHERE "
.$tabla."productos.productosid=$productosid";

$list = &$conn->Execute($SQL);
$nombre_comentario $list->fields['nombre_comentario'];
?>


Producto:---------TV
Marca:------------Sony
Modelo:-----------ABC123
Caracteristica:---1080p Full HD....
Comeentario:-

Los comentarios del producto
||-------------ID---------------||-----------Nombres---------------||--------------------------------------||
||---<? echo $comentarioid ?>---||--------<? echo $nombres ?>------||------<? echo $nombre_comentario ?>---||
||---------------------------------------------------------------------------------------------------------||
||-------------1----------------||----------------EVA--------------||---Excelente Producto lo Recomiendo---||
||-------------2----------------||----------------ADAM-------------||---Si muy buen producto---------------||
||-------------1----------------||----------------EVA--------------||---Yo compre Dos----------------------||

Tabla:

Código HTML:
CREATE TABLE `personas` (
  `personasid` int(11) NOT NULL AUTO_INCREMENT,
  `cedula` varchar(40) NOT NULL DEFAULT '',
  `clave` varchar(40) NOT NULL DEFAULT '',
  `email` varchar(60) DEFAULT NULL,
  `nombres` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`personasid`),
  UNIQUE KEY `cedula` (`cedula`)
) ;
CREATE TABLE `marcas` (
  `marcasid` int(11) NOT NULL AUTO_INCREMENT,
  `modeloid` int(11) DEFAULT NULL,
  `nombre_marcas` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`marcasid`)
) ;
CREATE TABLE `modelo` (
  `modeloid` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_modelo` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`modeloid`)
)  ;
CREATE TABLE `productos` (
  `productosid` int(11) NOT NULL AUTO_INCREMENT,
  `modeloid` int(11) DEFAULT NULL,
  `marcasid` int(11) DEFAULT NULL,
  `personasid` int(11) DEFAULT NULL,
  `comentarioid` int(11) DEFAULT NULL,
  `titulo_producto` varchar(100) NOT NULL DEFAULT '',
  `descripcion` longtext NOT NULL,
  PRIMARY KEY (`productosid`)
) ;
CREATE TABLE `comentario` (
  `comentarioid` int(11) NOT NULL AUTO_INCREMENT,
  `personasid` int(11) DEFAULT NULL,
  `productosid` int(11) DEFAULT NULL,
  `nombre_comentario` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`comentarioid`)
)  ;


  #2 (permalink)  
Antiguo 12/10/2015, 16:34
 
Fecha de Ingreso: marzo-2011
Mensajes: 70
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: consulta comentarios por producto

En la tabla productos, porque referencias marca_id y modelo_id ? cuando en la tabla marca_id ya esta referenciado el modelo al que pertenece esa marca con el campo modelo_id ?

y también porque en la tabla productos tienes personasid? es el id de la persona que registro ese producto? yo creo que te esta mostrando a la persona que traes en la tabla productos no en los comentarios.
  #3 (permalink)  
Antiguo 12/10/2015, 21:20
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: consulta comentarios por producto

Cita:
Iniciado por June310 Ver Mensaje
En la tabla productos, porque referencias marca_id y modelo_id ? cuando en la tabla marca_id ya esta referenciado el modelo al que pertenece esa marca con el campo modelo_id ?

y también porque en la tabla productos tienes personasid? es el id de la persona que registro ese producto? yo creo que te esta mostrando a la persona que traes en la tabla productos no en los comentarios.



En la tabla productos esta personasid para mostrar el ID de la persona registrada asu vez mostrar el nombre,

cada persona hace un registro de un producto, y entre ellos hacen sus comentarios, de momento no tengo esos resultados que puse como ejemplo, y no logro mostrar todo los comentarios de cada producto, solo me da el ultimo comentario

Código PHP:
ESTO ES LO QUE DEBERIA SALIR... PERO NO MUESTRA ESTE RESULTADO

||-------------ID---------------||-----------Nombres---------------||--------------------------------------||
||---<? echo $comentarioid ?>---||--------<? echo $nombres ?>------||------<? echo $nombre_comentario ?>---||
||---------------------------------------------------------------------------------------------------------||
||-------------1----------------||----------------EVA--------------||---Excelente Producto lo Recomiendo---||
||-------------2----------------||----------------ADAM-------------||---Si muy buen producto---------------||
||-------------1----------------||----------------EVA--------------||---Yo compre Dos----------------------||

ESTO ES EL RESULTADO REAL MUESTRA EL ULTIMO COMENTARIO
||-------------ID---------------||-----------Nombres---------------||--------------------------------------||
||---<? echo $comentarioid ?>---||--------<? echo $nombres ?>------||------<? echo $nombre_comentario ?>---||
||---------------------------------------------------------------------------------------------------------||
||-------------1----------------||----------------EVA--------------||---Yo compre Dos----------------------||
Esta es la tabla actual la tabla producto hace referencia a todo los ids de cada tabla (CORREGIDO MARCAS)
Código HTML:
CREATE TABLE `personas` (
  `personasid` int(11) NOT NULL AUTO_INCREMENT,
  `cedula` varchar(40) NOT NULL DEFAULT '',
  `clave` varchar(40) NOT NULL DEFAULT '',
  `email` varchar(60) DEFAULT NULL,
  `nombres` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`personasid`),
  UNIQUE KEY `cedula` (`cedula`)
) ;
CREATE TABLE `marcas` (
  `marcasid` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_marcas` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`marcasid`)
) ;
CREATE TABLE `modelo` (
  `modeloid` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_modelo` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`modeloid`)
)  ;
CREATE TABLE `productos` (
  `productosid` int(11) NOT NULL AUTO_INCREMENT,
  `modeloid` int(11) DEFAULT NULL,
  `marcasid` int(11) DEFAULT NULL,
  `personasid` int(11) DEFAULT NULL,
  `comentarioid` int(11) DEFAULT NULL,
  `titulo_producto` varchar(100) NOT NULL DEFAULT '',
  `descripcion` longtext NOT NULL,
  PRIMARY KEY (`productosid`)
) ;
CREATE TABLE `comentario` (
  `comentarioid` int(11) NOT NULL AUTO_INCREMENT,
  `personasid` int(11) DEFAULT NULL,
  `productosid` int(11) DEFAULT NULL,
  `nombre_comentario` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`comentarioid`)
)  ;
  #4 (permalink)  
Antiguo 12/10/2015, 22:59
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: consulta comentarios por producto

Hola, hice algunos cambios> ELIMINE comentarioid int(11) DEFAULT NULL, de la tabla productos,
Quedando asi.

Código HTML:
)  ;
CREATE TABLE `productos` (
  `productosid` int(11) NOT NULL AUTO_INCREMENT,
  `modeloid` int(11) DEFAULT NULL,
  `marcasid` int(11) DEFAULT NULL,
  `personasid` int(11) DEFAULT NULL,
  `titulo_producto` varchar(100) NOT NULL DEFAULT '',
  `descripcion` longtext NOT NULL,
  PRIMARY KEY (`productosid`)
) ;
CREATE TABLE `comentario` (
  `comentarioid` int(11) NOT NULL AUTO_INCREMENT,
  `personasid` int(11) DEFAULT NULL,
  `productosid` int(11) DEFAULT NULL,
  `nombre_comentario` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`comentarioid`)
)  ;
Aqui muestra el resultado de las tablas (aqui todo bien)
Código PHP:
<?
$productosid 
= (int)$_GET['productosid'];
$ADODB_FETCH_MODE ADODB_FETCH_ASSOC;
$conn = &ADONewConnection('mysql');    
$conn->Connect($dbhost,$dbuser,$dbpass,$dbdatabase);
// Esta es una forma de  unir muchas tablas
$SQL "SELECT * FROM ".$tabla."productos
INNER JOIN "
.$tabla."personas ON ".$tabla."productos.personasid=".$tabla."personas.personasid 
INNER JOIN "
.$tabla."modelo ON ".$tabla."productos.modeloid=".$tabla."modelo.modeloid 
INNER JOIN "
.$tabla."marcas ON ".$tabla."productos.marcasid=".$tabla."marcas.marcasid 
INNER JOIN "
.$tabla."comentarios ON ".$tabla."productos.comentid=".$tabla."comentarios.comentid
WHERE "
.$tabla."productos.productosid=$productosid";

$list = &$conn->Execute($SQL);
$titulo_producto $list->fields['titulo_producto'];
?>

Producto:---------TV
Marca:------------Sony
Modelo:-----------ABC123
Caracteristica:---1080p Full HD....
Código PHP:

Use el codigo de esta manera

          <?
        $SQL 
mysql_query("SELECT * FROM ".$tabla."comentario ORDER  BY ".$tabla."comentario.personasid");
        
$cant =  mysql_num_rows($SQL);
        if(
$cant>0){                        
        while(
$resp mysql_fetch_array($SQL)){
        
?>
       ID Persona <?=$resp['personasid']?>  ID Producto <?=$resp['productosid']?> Comentario  <?=$resp['nombre_comentario']?>  /// 
          <?  }  } ?>
        
        
      
Resultado id de persona, id de producto y el comentario, con el fin de relacionar el comentario con el producto y persona,
la idea es ordenar y  mostrar varios comentarios de un solo producto, que  vayan haciendo los usuarios o persona.

Como seria la solucion..?

||-------------ID---------------||-----------ID-----------------||--------------------------------------||
||-----<? echo $personasid ?>---||----<? echo $productosid ?>---||------<? echo $nombre_comentario ?>---||
||------------------------------------------------------------------------------------------------------||
||-------------1----------------||-----------1----(EVA)---------||---Excelente Producto lo Recomiendo---||
||-------------2----------------||-----------2----(ADAM)--------||---Si muy buen producto---------------||
||-------------1----------------||-----------1----(EVA)---------||---Yo compre Dos----------------------||
  #5 (permalink)  
Antiguo 13/10/2015, 08:24
 
Fecha de Ingreso: marzo-2011
Mensajes: 70
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: consulta comentarios por producto

Por lo que veo en tu query

Código:
$SQL = "SELECT * FROM ".$tabla."productos 
INNER JOIN ".$tabla."personas ON ".$tabla."productos.personasid=".$tabla."personas.personasid  
INNER JOIN ".$tabla."modelo ON ".$tabla."productos.modeloid=".$tabla."modelo.modeloid  
INNER JOIN ".$tabla."marcas ON ".$tabla."productos.marcasid=".$tabla."marcas.marcasid  
INNER JOIN ".$tabla."comentarios ON ".$tabla."productos.comentid=".$tabla."comentarios.comentid 
WHERE ".$tabla."productos.productosid=$productosid";
Solo haces match con la tabla de productos, en total deberian de ser 5 algo asi:

productos.modeloid = modelos.modeloid
productos.marcaid = marca.marcaid
productos.personasid = personas.personasid
productos.productosid = comentarios.productosid
comentarios.personasid=personas.personasid

select * from productos a, modelos b, personasid c , comentarios e where a.modeloid = b.modelois and a.marcaid =c.marcaid and a.personasid=c.personasid and a.productorid=d.productosid and d.personasid= c.personasid
  #6 (permalink)  
Antiguo 13/10/2015, 10:08
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: consulta comentarios por producto

Este es el nuevo error
Código PHP:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

<?
        $SQL 
mysql_query("select * from ".$tabla."productos a, ".$tabla."modelos b, personasid c , ".$tabla."comentarios e where a.modeloid = b.modeloid and a.marcaid =c.marcaid and a.personasid=c.personasid and a.productosid=d.productosid and d.personasid= c.personasid");
        
$cant =  mysql_num_rows($SQL);
        if(
$cant>0){                        
        while(
$resp mysql_fetch_array($SQL)){
        
?>
       ID Persona <?=$resp['personasid']?>  ID Producto <?=$resp['productosid']?> Comentario  <?=$resp['nombre_comentario']?>  /// 
          <?  }  } ?>
  #7 (permalink)  
Antiguo 14/10/2015, 09:06
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: consulta comentarios por producto

Lo Resolvi de esta forma, muestra el comentario de cada producto, el detalle es como traigo el ID de 'personas'

Código PHP:
          <?
        $SQL 
mysql_query("SELECT * FROM ".$tabla."comentario WHERE ".$tabla."comentario.productosid='".$_GET['productosid']."' ORDER BY nombre_comentario");
        
$cant =  mysql_num_rows($SQL);
        if(
$cant>0){                        
        while(
$resp mysql_fetch_array($SQL)){
        
?>
       ID Producto <?=$resp['productosid']?> Comentario  <?=$resp['nombre_comentario']?>  Autor <?=$resp['nombres']?>
          <?  }  } ?>
intente con 'left join' y da errores

Código PHP:
<?
$SQL 
"SELECT * from ".$tabla."comentario LEFT JOIN ".$tabla."personas ON ".$tabla."comentario.personasid=$personasid ".$tabla."comentario.productosid='".$_GET['productosid']."' ORDER BY coment_contenido";
?>
aparece este Error:

Warning: mysql_num_rows() expects parameter 1 to be resource, string given in

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:23.