TransWikia.com

Inner join en php

Stack Overflow en español Asked by Vikingo22 on November 12, 2021

Tengo el siguiente código en PHP para poder llamar a una tabla desde MySQL

$query = "SELECT * FROM lugar WHERE Nombre NOT LIKE '' ORDER By id_lugar LIMIT 25";

if (isset($_POST['consulta'])) {
    $q = $conn->real_escape_string($_POST['consulta']);
    $query = "SELECT * FROM lugar WHERE id_lugar LIKE '%$q%' OR Nombre LIKE '%$q%' OR ciuda LIKE '%$q%' OR region '$q' ";
}

El código, muestra la tabla ordenada como se encuentra en MySQL.

La tabla la tengo enlazada con primary y forean key a otra, pero quisiera insertar una columna a través de inner join, probando en phpmyadmin, funciona el metodo, pero no en el código php.

Tabla 1 – lugar

id_lugar

Nombre

ciudad

region

Tabla 2 – lugar_poblacion

id

id_lugar

id_poblacion

Tabla 3 – poblacion

id_poblacion

num_personas

num_casas

Quiero tomar la columna "num_personas" y añadirla a la tabla "lugar" a través de INNER JOIN

One Answer

Puedes resolverlo con esta consulta más o menos:

SELECT 
    l.Nombre,
    l.ciudad,
    p.num_personas
FROM lugar_poblacion lp
    INNER JOIN lugar l     ON lp.id_lugar = l.id_lugar
    INNER JOIN poblacion p ON lp.id_poblacion = p.id_poblacion
WHERE 
    l.id_lugar LIKE '%$q%' OR 
    l.Nombre LIKE '%$q%' OR 
    l.ciudad LIKE '%$q%' OR 
    l.region LIKE '%$q%'

Para mejor comprensión, puedes empezar los JOIN por la tabla que hace de enlace entre lugar y poblacion y seguir a partir de ahí.

Si observas, he usado alias cortos para cada tabla, luego, esos mismos alias hay que usarlos para referirse a cada columna, sea en los JOIN, sea en el SELECT, sea en el WHERE o en cualquier otra parte de la consulta.

Si hay alguna duda, dilo en comentarios.

EDIT: para aclarar lo dicho en comentarios

El objetivo de los JOIN es unir todas las tablas en un sólo conjunto de resultados.

Si necesitaras incorporar los criterios que aparecen en tu primera consulta, sólo tendrías que hacer esto:

SELECT 
    l.Nombre,
    l.ciudad,
    p.num_personas
FROM lugar_poblacion lp
    INNER JOIN lugar l     ON lp.id_lugar = l.id_lugar
    INNER JOIN poblacion p ON lp.id_poblacion = p.id_poblacion
WHERE 
    l.id_lugar LIKE '%$q%' OR 
    l.Nombre LIKE '%$q%' OR 
    l.ciudad LIKE '%$q%' OR 
    l.region LIKE '%$q%' AND
    l.Nombre NOT LIKE ''
ORDER By l.id_lugar LIMIT 25

Hemos agregado a la consulta el criterio Nombre NOT LIKE '' como AND no como OR porque sería complementario a los otros, y hemos agregado el ORDER BY

Answered by A. Cedano on November 12, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP