Problema con php y mysql

Muy buenas, me gustaría combinar unas tablas y poder imprimirlas en mi php de forma descendente, aquí dejo toda la información:
Tablas:
isv_noticia : id, time_alta, activo
isv_noticia_lang : id_parent, texto, resumen, lang...
Código:
$sql = mysql_query("SELECT * FROM isv_noticia_lang WHERE lang = 'es' ORDER BY id_parent DESC");
            while($row = mysql_fetch_array($sql)){
?> <a href="..">
<p class="fecha_n">FECHA_INI<strong> - <?php echo ''.$row["titulo"].' <br />'?> </strong></p>
</a><?php ;
?>
<p class="txt_n"><?php echo ''.$row["resumen"].' <br />'?> </p>
<?php ;
            }
Cuando hago la consulta con más de 1 tabla me da error, necesito imprimir solo las noticias que están activas y la fecha.
Un saludo.

1 Respuesta

Respuesta
1
Suponiendo que id_parent esté relacionado con id y que el campo activo valga 1 ó 0 en función de si está activa la noticia o no:
$sql = mysql_query("SELECT * FROM isv_noticia_lang INNER JOIN isv_noticia ON isv_noticia_lang.id_parent=isv_noticia.id WHERE lang = 'es' AND activo='1' ORDER BY id_parent DESC");
En efecto, las id's están relacionadas y el campo activo vale 1 o 0. Pongo el siguiente código y no hace caso a las condiciones, me imprime todo lo que hay en la base de datos:
                <?php
            $sql = mysql_query("SELECT * FROM isv_noticia_lang INNER JOIN isv_noticia ON isv_noticia_lang.id_parent=isv_noticia.id WHERE lang = 'es' AND activo='1' ORDER BY id_parent DESC");
            while($row = mysql_fetch_array($sql)){
            ?> <a href="..">
<p class="fecha_n"><?php echo ''.$row["time_alta"].''?><strong> - <?php echo ''.$row["titulo"].' <br />'?> </strong></p>
</a><?php ;
            ?>
<p class="txt_n"><?php echo ''.$row["resumen"].' <br />'?> </p>
<?php ;
            }
            ?>
Las condiciones WHERE son claras, sólo escogerá registros en los que lang valga 'es' y activo 1. Otra cosa es que sea así. Prueba a mostrar también esos campos para comprobarlo.
Una posible causa de lo que dices es que los id_parent no estén correctamentes asignados. Por ejemplo si todos ellos tuviesen el mismo valor.
Buenas, las id si que están bien correctamente asignados. Hacemos una cosa, te hago una impresión de las tablas y vemos si puedes solucionarme el problema :)
http://www.jordisalom.es/1.jpg
http://www.jordisalom.es/2.jpg
Muchas gracias.
Veo que las tablas parecen correctas. Hay pocas noticias no activas, así que se supone que saldrán la mayoría.
Nos quedaría ver el resultado de ejecutar la sentencia en phpMyAdmin:
SELECT id, id_parent, lang, activo, titulo FROM isv_noticia_lang INNER JOIN isv_noticia ON isv_noticia_lang.id_parent=isv_noticia.id WHERE lang='es' AND activo='1' ORDER BY id_parent DESC
Que es lo que dices que no realiza correctamente. Yo sigo viendo la sentencia como correcta. Quizás ver el resultado nos dé más pistas.
Otra ayuda sería ver la estructura de las dos tablas.
CREATE TABLE `isv_noticia` (
  `id` int(11) NOT NULL auto_increment,
  `activo` tinyint(1) default '1',
  `destacada` tinyint(1) default '0',
  `time_ini` int(11) default NULL,
  `time_fin` int(11) default NULL,
  `id_galeria` int(11) default NULL,
  `id_alta` int(11) default NULL,
  `time_alta` int(11) default NULL,
  `id_update` int(11) default NULL,
  `time_update` int(11) default NULL,
  `imagen` varchar(100) default NULL,
  `time` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `activo` (`activo`),
  KEY `time_ini` (`time_ini`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
CREATE TABLE `isv_noticia_lang` (
  `id_parent` int(11) NOT NULL auto_increment,
  `lang` char(2) NOT NULL default 'es',
  `titulo` varchar(255) default NULL,
  `resumen` mediumtext,
  `intro` mediumtext,
  `texto` text,
  `buscador` text,
  PRIMARY KEY  (`id_parent`,`lang`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
http://www.amaraproyectos.com/AMA/prueba/pruebabackoffice/posicionamiento/noticias/noticias.php
Un saludo!
La información es muy completa, ahora sólo queda que expliques porqué piensas que funciona mal, cuando lo que aparece en la página es totalmente correcto: sólo las noticias activas del idioma es.
Por ejemplo, la noticia 25 no aparece que es no activa, y la noticia 24 (probando las destacadas) aparece sólo una vez para el idioma es y no dos veces.
¿Dónde está el error?
Saludos.
David Cortés Braña
P.S. Por cierto, el campo id_parent en principio no debería se auto_incremental puesto que debe asignarse siempre en función del id de la otra tabla. Aunque si siempre le das un valor no tiene mayor importancia.
Muy buenas,
Aquí te dejo lo que me imprime:
http://www.jordisalom.es/noticias.jpg
No distingue entre los que son activos y los que no. Aparte se me come algunos resultados como el que tiene la id 25.
Perdona por tardar en mandarte la aclaración.
Un saludo :)
A ver,
no sé si no has leído mi mensaje, o es que me explico muy mal.
Dices que no aparece el mensaje con ID 25. Como ya te he explicado, este mensaje NO debe aparecer puesto que es de una noticia NO activa y es eso exactamente lo que estás pidiendo con tu selección.
La imagen que me envías es exactamente lo que aparece y que ya te he comentado que ES CORRECTO.
Los que salen son ACTIVOS (puesto que casi todos lo son en tu tabla), el 25 NO SALE porque NO ES ACTIVO, y sólo salen los del idioma solicitado, sino saldrían por duplicado y no es el caso.
En resumen, QUE FUNCIONA CORRECTAMENTE, pero por algún motivo no lo ves, estás obcecado o esperas alguna cosa distinta de lo que has programado.
Si sigues creyendo que funciona mal, deberás ser mucho más específico, indicando el id de la noticia que crees que sale o no sale incorrectamente y el motivo por el que crees que es incorrecto.
Por favor, lee las respuestas con detenimiento y párate un poco a razonar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas