Comunidad de diseño web y desarrollo en internet online

no cuenta los registros que necesito

Citar            
MensajeEscrito el 12 Dic 2011 04:30 pm
Buen dia les cuento que estoy tratando de armar una web de tipo autoayuda donde el usuario de cualquier provincia de la argentina va a poder publicar sus problemas y la gente podra comentarlos.
Cuando un problema se solucione pasara al estado "resuelto" mientras tanto esta en estado "sin resolver" esa es la idea. Ya arme la base de datos lo que necesito es que en la pagina principal se muestren todos los problemas "sin resolver", el titulo del problema, el detalle del problema, la fecha del problema, la cantidad de comentarios que tiene ese problema, el ultimo comentario registrado y que si no tiene comentarios tambien se vean.
Etuve probando muchas consultas SQL de las cuales la que mas se hacerca es esta que pongo abajo me agrupa por titulo del problema y me cuenta la cantidad de comentarios pero no me muestra los problemas que no tienen comentarios lo cual no me sirve les dejo la estructura de la base cualquier consejo ayuda o comentario les estare muy agradecido un saludo.

CREATE DATABASE dbprob
USE dbprob
CREATE TABLE usuario (
idusuario int(6) NOT NULL AUTO_INCREMENT,
mailus varchar(30) NOT NULL,
nombre varchar(20) DEFAULT NULL,
apellido varchar(20) DEFAULT NULL,
PRIMARY KEY (idusuario));
CREATE TABLE comentario (
idcomentus int(6) NOT NULL AUTO_INCREMENT,
fecha datetime NOT NULL,
coment text NOT NULL,
idprob int(6) NOT NULL,
PRIMARY KEY (idcomentus));
CREATE TABLE estado (
idestadoprob int(2) NOT NULL AUTO_INCREMENT,
estadoprob varchar(25) NOT NULL,
PRIMARY KEY (idestadoprob));
CREATE TABLE provincia (
idprovincia int(3) NOT NULL AUTO_INCREMENT,
provincia varchar(25) NOT NULL,
PRIMARY KEY (idprovincia));
CREATE TABLE tituloprob (
idtituloprob int(6) NOT NULL AUTO_INCREMENT,
tituloprob varchar(25) NOT NULL,
PRIMARY KEY (idtituloprob));
CREATE TABLE prob (
idprob int(6) NOT NULL AUTO_INCREMENT,
prob text NOT NULL,
fechaprob datetime NOT NULL,
idusuario int(6) NOT NULL,
idprovincia int(3) NOT NULL,
idtituloprob int(6) NOT NULL,
idestadoprob int(2) NOT NULL,
PRIMARY KEY (idprob));

select tituloprob.tituloprob, tituloprob.idtituloprob,
prob.prob, prob.idprob, prob.fechaprob,
comentario.fecha, comentario.coment, comentario.idprob, comentario.idcomentus,
prob.idestadoprob, prob.idprovincia,
count(*) as cantcoment
from tituloprob, prob, comentario
where
prob.idtituloprob = tituloprob.idtituloprob and
comentario.idprob = prob.idprob and
prob.idestadoprob = '1' and
prob.idprovincia = '1'
group by prob.idtituloprob
order by prob.idprob desc

// prob.idestadoprob = '1' (sin resolver)
// prob.idprovincia = '1' (tucuman)

Por roigle111

11 de clabLevel



 

msie
Citar            
MensajeEscrito el 12 Dic 2011 08:09 pm
la solución se llama LEFT JOIN ;)
por lo que veo no eres muy duro en el tema! por lo cual te dejo una URL que algún amigo de Clab me facilito he hizo que mi vida fuera mas fácil!

http://boozox.net/mysql/explicacion-visual-de-los-sql-join-unir-tablas-con-sql/

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

chrome
Citar            
MensajeEscrito el 12 Dic 2011 08:23 pm
Hola
Puedes hacer 2 consultas:

1º Para listar los títulos de problema y problemas

2º Según el resultado de la primera consulta, extraes los datos de cada problema (puede ser 1 consulta por problema) y los problemas que no arrojen comentarios (no aparecen en la tabla comentarios, por lo tanto en tu consulta no existe), le asignas por medio de script el valor de 0

Cuéntanos a ver que tal te funciona

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 13 Dic 2011 07:54 pm

ElSiniestro escribió:

Hola
Puedes hacer 2 consultas:

1º Para listar los títulos de problema y problemas

2º Según el resultado de la primera consulta, extraes los datos de cada problema (puede ser 1 consulta por problema) y los problemas que no arrojen comentarios (no aparecen en la tabla comentarios, por lo tanto en tu consulta no existe), le asignas por medio de script el valor de 0

Cuéntanos a ver que tal te funciona


muchas gracias ElSiniestro aclarame mas tu idea me olvide mencionar que soy novato en esto como hago para que la 2da consulta llame el resultado de la primera?
muchas gracias

Por roigle111

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2011 01:12 am
Hey, ¿no has mirado el artículo que dejó jpcw? eso no te lo explican mejor ni con plastilina jejejeje (Además en el mismo blog hay un artículo sobre múltiples join por consulta)

Es que es más sencillo por join, explicarte lo que te decía practicamente es hacerte un mal, debido a que es una mala práctica de programación y hará lento tu script cuando el tráfico aumente

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 14 Dic 2011 11:48 am

jpcw escribió:

la solución se llama LEFT JOIN ;)
por lo que veo no eres muy duro en el tema! por lo cual te dejo una URL que algún amigo de Clab me facilito he hizo que mi vida fuera mas fácil!

http://boozox.net/mysql/explicacion-visual-de-los-sql-join-unir-tablas-con-sql/



Gracias JPCW!!! si soy muy novato en esto stuve probando con left join me costo entenderlo hasta que le agarre la mano la verdad que en pocas lineas podes hacer unir tablas y salio esto:

SELECT prob.*, COUNT(prob.idprob) AS total_com
FROM prob
LEFT JOIN comentario
ON prob.idprob=comentario.idprob
GROUP BY prob.idprob

me salen todos los problemas, me cuenta los comentarios de cada problema pero en los comentarios que no tienen problema sale 1 y yo necesito que salga 0 o null de lo contrario cuando muestre en la pagina me va a decir que tal problema tiene un comentario y no es asi muchas gracias nuevamente

Por roigle111

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2011 11:50 am

ElSiniestro escribió:

Hey, ¿no has mirado el artículo que dejó jpcw? eso no te lo explican mejor ni con plastilina jejejeje (Además en el mismo blog hay un artículo sobre múltiples join por consulta)

Es que es más sencillo por join, explicarte lo que te decía practicamente es hacerte un mal, debido a que es una mala práctica de programación y hará lento tu script cuando el tráfico aumente


Gracias la verdad que no habia visto el mensaje de jpcw esta muy bueno!

Por roigle111

11 de clabLevel



 

chrome

 

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