Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda con Consulta

Estas en el tema de Duda con Consulta en el foro de Bases de Datos General en Foros del Web. Estoy tratando de ejecutar una consulta. El código es este: Código PHP: SELECT us .*,  ps .*, count ( ps . idpost ) as  cantpost ,  rp ...
  #1 (permalink)  
Antiguo 11/06/2004, 11:43
Avatar de 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
Duda con Consulta

Estoy tratando de ejecutar una consulta. El código es este:
Código PHP:
SELECT us.*, ps.*,count(ps.idpost) as cantpostrp.*, count(rp.idreply) as cantreply,
DAYOFMONTH(us.registerdate) AS diaDAYOFWEEK(us.registerdate) AS semana,
MONTH(us.registerdate) AS mesYEAR(us.registerdate) AS year,
DATE_FORMAT(us.registerdate,'%h:%i %p') AS hora FROM users uspost psreply rp
WHERE ps
.idpost=1  AND ps.iduser=us.iduser AND rp.idpost=ps.idpost group by ps.idpost 
ahora mis tablas tienen esta configuración :
Cita:
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,
`ip` varchar(16) NOT NULL default '000.000.000.000',
PRIMARY KEY (`idreply`)
) TYPE=MyISAM COMMENT='Replies for Post';

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

CREATE TABLE `users` (
`iduser` int(6) unsigned NOT NULL auto_increment,
`active` tinyint(1) unsigned NOT NULL default '0',
`lastvisit` datetime default NULL,
`registerdate` datetime default NULL,
`level` tinyint(4) unsigned NOT NULL default '4',
`rank` tinyint(4) unsigned NOT NULL default '0',
`avatar` varchar(50) NOT NULL default 'noavatar.gif',
`avatar_type` varchar(50) default NULL,
`name` varchar(50) NOT NULL default '',
`mail` varchar(250) NOT NULL default '',
`show_mail_public` tinyint(1) NOT NULL default '0',
`country` varchar(250) default NULL,
`country_flag` varchar(50) NOT NULL default 'noflag.gif',
`birthday` date default NULL,
`login` varchar(150) NOT NULL default '',
`password` varchar(250) NOT NULL default '',
`icq` varchar(15) default NULL,
`aim` varchar(250) default NULL,
`yim` varchar(250) default NULL,
`msn` varchar(250) default NULL,
`website` varchar(250) default NULL,
`ocupation` varchar(250) default NULL,
`interests` tinytext,
`activation_key` varchar(250) NOT NULL default '',
`signature` tinytext,
PRIMARY KEY (`iduser`)
) TYPE=MyISAM COMMENT='Users Data';
ahora mi tabla usuario consta de dos usuarios con iduser=1 y iduser=2. La tabla post tambien contiene el iduser=1 y la tabla reply tambien contiene el iduser=1. Si todo esto esta así me funciona bien pero ahora si la tabla reply está vacia no me saca los resultados de la tabla POST y usuario.
El código donde saco esto es este:
Código PHP:
 $query "SELECT ps.*,ps.date,DAYOFMONTH(ps.date) AS dia, DAYOFWEEK(ps.date) AS semana, MONTH(ps.date) AS mes, YEAR(ps.date) AS year, DATE_FORMAT(ps.date,'%h:%i %p') AS hora FROM  post ps WHERE ps.idpost=".$idpost." AND ps.idcat=".$_GET['catforo']." AND ps.idforo=".$_GET['foro']."";
  
$result mysql_query($query) or die("No se ha podido ejecutar la consulta ".$query.". Error: ".mysql_error());
  
$fetch mysql_fetch_assoc($result);
  
# Consulta para saber el tema actual
  
$query_00 "SELECT * FROM foros WHERE idcat=".$_GET['catforo']." AND idforo=".$_GET['foro']."";
  
$result_00 mysql_query($query_00) or die("No se ha podido ejecutar la consulta ".$query_00.". Error: ".mysql_error());
  
$fetch_00 mysql_fetch_assoc($result_00);
  
# Consulta para obtener los datos del usuario
  
$query_01 "SELECT us.*, ps.*,count(ps.idpost) as cantpost, rp.*, count(rp.idreply) as cantreply, DAYOFMONTH(us.registerdate) AS dia, DAYOFWEEK(us.registerdate) AS semana, MONTH(us.registerdate) AS mes, YEAR(us.registerdate) AS year, DATE_FORMAT(us.registerdate,'%h:%i %p') AS hora FROM users us, post ps, reply rp WHERE ps.idpost=".$fetch['idpost']." AND ps.iduser=us.iduser GROUP BY ps.iduser";
  
$result_01 mysql_query($query_01) or die("No se ha podido ejecutar la consulta ".$query_01.". Error: ".mysql_error());
  
$fetch_01 mysql_fetch_assoc($result_01);
  
$messages $fetch_01['cantpost'] + $fetch_01['cantreply'];
  
# Consulta para mostrar las respuestas
  
$query_02 "SELECT rp.*,us.* FROM reply rp, users us WHERE rp.idpost=".$fetch['idpost']." AND rp.iduser=us.iduser ORDER BY rp.idreply";
  
$result_02 mysql_query($query_02) or die("No se ha podido ejecutar la consulta ".$query_02.". Error: ".mysql_error());
  
$fetch_02 mysql_fetch_assoc($result_02);
  echo 
"<table width='100%'  border='0' cellpadding='0' cellspacing='1'>
        <tr><td rowspan='2' class='center forobottom' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'><table width='100%'  border='0' cellspacing='0' cellpadding='0'>
        <tr><td class='userlogin'><span class='info' title='"
.$fetch_01['name']."'><a href='foros.php?action=show&what=userinfo&iduser=".$fetch_01['iduser']."&".SID."'>".$fetch_01['login']."</a></span></td></tr>
        <tr>
        <td class='center'><img src='images/avatar/"
.$fetch_01['avatar']."' alt='Avatar de ".$fetch_01['name']."' class='hand'></td>
        </tr><tr><td class='center'>"
;
  
# Llamada a la función para representar los ranking de usuarios
  
Rank($fetch_01['rank']);
  echo 
"</td>
        </tr><tr><td class='txt'>"
;
  
MakeDate($fetch_01['dia'], $fetch_01['semana'], $fetch_01['mes'], $fetch_01['year'], $fetch_01['hora']);
  echo 
"</td></tr><tr><td class='txt'>Mensajes: ".$messages."</td></tr><tr>
        <td class='txt'>País: "
.$fetch_01['country']."</td></tr></table></td>
        <td width='39%' valign='top' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>Publicado: "
;
  
MakeDate($fetch['dia'], $fetch['semana'], $fetch['mes'], $fetch['year'], $fetch['hora']);
  
$cadena $fetch['text'];
  
$format BBCode($cadena);
  
$formattext nl2br($format);
  echo 
"</td>
        <td width='57%' valign='top' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>Asunto: "
.$fetch['subject']."
        <img src='images/forum/btn/btn02.gif' alt='Citar ...' align='absmiddle' class='hand' border='0'> <img src='images/forum/btn/btn05.gif' alt='Editar mensaje ...' align='absmiddle' class='hand' border='0'> <img src='images/forum/btn/btn010.gif' align='absmiddle' alt='IP Grabada' class='hand' border='0'> <img src='images/forum/btn/btn011.gif' align='absmiddle' alt='Eliminar mensaje ...' class='hand' border='0'>
        </td></tr><tr>
        <td colspan='2' valign='top' class='txt td style0'>"
.$formattext."</td>
        </tr><tr>
        <td colspan='3' class='center forotema style1 right'>&nbsp;</td>"

que es lo que hago mal?
Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 11/06/2004, 12:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

En el WHERE

rp.idpost=ps.idpost

Con esto obligas que rp.idpost tenga que tener valor y que sea igual a ps.idpost en un registro para mostrar algo.

La solucion: usar LEFT JOIN (www.mysql.com/join).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 11/06/2004, 14:44
Avatar de 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
josemi

No entendí muy bien el uso de LEFT JOIN y RIGHT JOIN me podrías explicar como puedo hacer mi consulta haciendo uso de estos dos. Pues la sintaxis es:
Código PHP:
SELECT FROM a,b LEFT JOIN c ON (c.key=a.keyLEFT JOIN d ON (d.key=a.keyWHERE b.key=d.key
quien es c??

Esto es lo que quiero es seleccionar todo de la tabla post y de usuarios todo pero donde el idusuario que tiene ese post sea igual al idusurio de la tabla usuarios para asi poder imprimir los datos de ese usuario.

Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 11/06/2004, 14:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
No entendí muy bien el uso de LEFT JOIN y RIGHT JOIN me podrías explicar como puedo hacer mi consulta haciendo uso de estos dos. Pues la sintaxis es:
Entonces ... movamos el mensaje al foro de Base de datos y .. por favor las preguntas de SQL (pese que pongas el código PHP que lo usas para mostrarlo), hazalas en el foro adecuado.

Un saludo,
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 16:57.