entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Unir fila a consulta SELECT (concatenar) ?

Hola, saludos.

Empezaré explicando que tengo éstas 3 tablas:
3 tablas

En mi pagina principal imprimo los datos de la tabla noticia(titulo,fecha,anotaciones) de la siguiente forma:

 include("conexion.php");

    $sql = "SELECT  *from noticia order by fecha DESC; //Creamos la select
    $query=$con->prepare($sql); //para evitar injection sql
    $query->execute();

    $model=array();

    while($rows=$query->fetch()){
       $model[]=$rows;
    }

Aclaro que me conecto a mi base de datos mediante PDO.
Pues bien, seguido muestro mis datos de la siguiente forma:

 foreach ($model as $row ) {

        echo " <div class='col-md-10'>
            <article class='white-panel'>
              <div class='row'>     
                 <div class='col-md-10'>
                   <h4><u>".$row['titulo']."</u></h4>
                   <span>Fecha publicacion: ".$row['fecha']."</span>

                 </div>
                 <div class='col-md-10'>
                   <a href='#'>  <input type:'button' class='btn btn-xs btn-primary' value='Leer más...'></a>
                 </div> 
              </div>
            </article>
          </div>";
          # code...
        }

Ahora obtengo mi resultado algo asi:
enter image description here

Ahora lo que ocurre es que adicional quiero mostrar el nombre del BARRIO para cada NOTICIA y estás tablas se relacionan como ya pueden ustedes ver, mi problema es que nose como deberia hacer el select para incluir la fila nombre de BARRIO e imprimirlo en el foreach

Si tienes alguna idea por favor házmela saber :) .

GusGarsaky comentado Jul 23, 2015

Intenta:

SELECT titulo, fecha, barrio FROM noticia, barrio
WHERE id_noticia = barrio.id_noticia;

Disculpa que las columnas no concuerden con tu tabla, es que no veo las imágenes que has puesto.

Dr oscar comentado Jul 23, 2015

No funcionaria de ningún modo así, porque son 3 tablas y debo desde la tabla NOTICIA relacionarme con la tabla JUNTA para obtener el dato "nombre" de la tabla "BARRIO".
y la llave principal de NOTICIA es un int autoincremetable.

GusGarsaky comentado Jul 23, 2015

Trata de poner mejor las imágenes porque no se ve nada. Asumo que tienes una tabla para noticias, otra para los barrios y otra que almacena la noticia con los barrios asociados a ella. Entonces, podrías hacer algo como:

Select n.titulo, n.fecha, b.nombre FROM Noticia n, Barrio b
WHERE n.id AND b.id IN
(SELECT * FROM Noticia_Barrio);

No recuerdo bien las restricciones para las subconsultas, pero intenta.

Dr oscar comentado Jul 23, 2015

Pero a mi si me aparecen las imagenes, nose porque no le aparecen.

y estaba intentando hacer la consulta asi:

SELECT n.numero,n.titulo,n.fecha,b.nombre from noticia n,barrio b where n.cod_Junta=(SELECT j.cod_Junta from junta j,barrio b where j.cod_Barrio=b.cod_Barrio)order by n.fecha DESC

Pero me aparece el error:

#1242 - Subquery returns more than 1 row

GusGarsaky comentado Jul 23, 2015

Claro, porque tu subconsulta devuelve una lista de registros y tú estás comparando esa lista de registros con n.cod_Junta que es una sola columna.

Intenta esta consulta:

SELECT n.numero, n.titulo, n.fecha, b.nombre FROM noticia n, barrio b
WHERE n.cod_Junta IN
(SELECT j.cod_Junta FROM Junta j AND j.cod_Barrio = b.cod_Barrio);

Dr oscar comentado Jul 23, 2015

Perfecto :D . Ahora si me funciona. Escribela como respuesta para marcarla como respondida :) .

Peter comentado Jul 23, 2015

Hay 3 imágenes entre tu pregunta y tus comentarios que no cargan. "403 - Forbidden".

Si puedes corregir los permisos de donde las alojas bien. Si no, mejor las quitamos para que no este haciendo llamadas sin resultado.

Saludos.

Dr oscar comentado Jul 24, 2015

Creo que ya. Avísame si ahora si se visualizan.

Peter comentado Jul 24, 2015

Ahora si :D Gracias.

2 Respuestas

2votos

Leonardo-Tadei Puntos196760

Hola @Dr oscar,

la consulta que estás buscando es la siguiente:

SELECT NOTICIA.*, BARRIO.nombre
FROM (NOTICIA, JUNTA, BARRIO)
WHERE NOTICIA.cod_Junta=JUNTA.cod_Junta
AND JUNTA.cod_Barrio=BARRIO.cod_Barrio
ORDER BY NOTICIA.fecha DESC;

Puse los nombres de las tablas en mayúsculas porque así está en la imagen, pero tal vez tengas que cambiarlo a minúculas si tus tablas están así.

Lo que hace esto es relacionar la tabla NOTICIA con JUNTA, y a JUNTA con BARRIO, para encadenar las relaciones y poder obtener el nombre del barrio.

Saludos!

PD: la consulta sería mucho más eficiente si los códigos fueran todos enteros en vez de var_char.
Creá además un índice por cada código para ganar performance.

Dr oscar comentado Jul 23, 2015

Gracias por responder, el método no lo conocia.

Y disculpas con Gus Garsaky, su metodo funcionaba pero no al momento de ordenar, ó eso creo.

Gracias de igual forma a ambos por atender :D .

GusGarsaky comentado Jul 23, 2015

No pasa nada, no terminé de comprender bien tu problema porque no vi las estructuras de las tablas (por alguna razón no veo las imágenes). Que bueno que lo hayas resuelto. Salu2.

1voto

GusGarsaky Puntos5480

La consulta sería así:

SELECT n.numero, n.titulo, n.fecha, b.nombre FROM noticia n, barrio b
WHERE n.cod_Junta IN
(SELECT cod_Junta FROM Junta);

Dr oscar comentado Jul 23, 2015

Ah pero ésta es distinta, no funciona :/ . Aparece el error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AND j.cod_Barrio = b.cod_Barrio) LIMIT 0, 30' at line 3

Dr oscar comentado Jul 23, 2015

Antes me habia funcionado con ésta:

SELECT n.numero, n.titulo, n.fecha, b.nombre FROM noticia n, barrio b
WHERE n.cod_Junta IN
(SELECT cod_Junta FROM junta)

Dr oscar comentado Jul 23, 2015

Ahora tengo un problema porque debo mostrarlos en orden segun la fecha NOTICIA y me aparece utilizando éste :

SELECT n.numero, n.titulo, n.fecha, b.nombre FROM noticia n, barrio b
WHERE n.cod_Junta IN
(SELECT cod_Junta FROM junta) order by n.fecha DESC

Pero me muestra una fila para cada nombre de barrio y solo debe aparecer la noticia y el barrio correspondiente:
imagen

blaDDI comentado Jul 24, 2015

   SELECT a.nombre,c.fecha,c.asistencia,c.anotaciones 
     FROM barrio a
LEFT JOIN junta b ON(b.cod_Barrio=a.cod_Barrio)
LEFT JOIN noticia c ON(c.cod_Junta=b.cod_Junta) 
 ORDER BY c.fecha DESC

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

  • azuriguel ganó una medalla hace 26 minutos

    Humano Verificado - Verificó su email
  • rferreras ganó una medalla hace 44 minutos

    Club de los 100 - Received total of 100 points
  • rferreras ganó una medalla hace 45 minutos

    Humano Verificado - Verificó su email
  • asantosz ganó una medalla hace 1 hora

    Club de los 100 - Received total of 100 points
  • fmaciask ganó una medalla hace 5 horas

    Humano Verificado - Verificó su email
  • ShamiiCooper preguntó hace 12 horas

    Instancia de UpdatePanel
  • ShamiiCooper ganó una medalla hace 12 horas

    Regular - Primera visita hace más de 90 días
  • test123 ganó una medalla hace 17 horas

    Club de los 100 - Received total of 100 points
  • tetete ganó una medalla hace 17 horas

    Club de los 100 - Received total of 100 points
  • Testttt ganó una medalla hace 17 horas

    Club de los 100 - Received total of 100 points

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta