Unir dos tablas y buscar con PHP & MySQL
Unir dos tablas y buscar con PHP & MySQL. En esta ocasión nos enfocaremos en realizar búsquedas en dos tablas unidas por la sentencia INNER JOIN por defecto, y consiste en combinar y/o unificar cada fila de una tabla1 con cada fila de la otra tabla2, filtrando las filas que cumplan una determinada condición en común.
Por lo tanto, si deseamos realizar consultas en dos tablas es recomendable la utilización de la sentencias JOIN.
Unir dos tablas y buscar con PHP & MySQL
Sin embargo. Podemos utilizar la cláusula «WHERE» para usar el operador «LIKE» y poder realizar búsquedas precisas dentro de las dos tablas de acuerdo a una columna declarado en la cláusula WHERE.
Hagamos una breve explicación en el cual usaremos dos tablas una llamada «ALUMNOS» y la otra tabla llamada «CURSOS» aplicaremos una consulta en el cual explicaremos a continuación.
Ejemplo 01: Relacionar tablas con Inner Join
A) Tabla «Alumnos», con la clave primaria «cod»

b) Tabla «Cursos», con la clave primaria «id_curso»
Aplicamos la consulta con la sentencia INNER JOIN
SELECT nombres, ape_paterno, ape_materno FROM alumnos INNER JOIN cursos WHERE alumnos.id_curso = cursos.id_curso
Resultado Final después de realizar la consulta SQL. Si observamos veremos una tabla combinada donde hay columnas de las dos tablas relacionadas, tanto de la tabla «alumnos» como de la tabla «cursos». Esta unificación es posible gracias a la sentencia INNER JOIN.
Por lo tanto. Esta presentación hace que la información sea más relevante a la hora de tomar decisiones dentro de una organización.

2. Ejemplo 2: Buscador PHP y MYSQL usando INNER JOIN y clausula WHERE
Esta es la consulta que usaremos para este ejemplo, un poco grande pero funcional para este ejemplo de buscador INEER JOIN.
$sqln=mysqli_query($conn, "SELECT t1.id_pago, t1.monto, t1.fecha,t1.cantidad, t2.nombre_curso FROM pagos t1 INNER JOIN curso t2 ON t1.id_curso=t2.id_curso WHERE t2.nombre_curso LIKE '%$pbu%' order by t1.id_pago desc") or die(mysqli_error());
Estructura del buscador INNER JOIN completo.
Base de datos y sus Tablas
Trabajaremos en una base de datos llamada «php_union» en la cual contendrá 2 tablas, Una llamada «cursos» y otra llamada «pagos».
CREATE TABLE `curso` ( `id_curso` int(2) NOT NULL, `codcur` varchar(20) DEFAULT NULL, `nombre_curso` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `duracion` varchar(120) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; -- -- Volcado de datos para la tabla `curso` -- INSERT INTO `curso` (`id_curso`, `codcur`, `nombre_curso`, `duracion`) VALUES (1, '0001WORD', 'WORD', '3 SEMANAS'), (2, '0002EXCEL', 'EXCEL', '3 SEMANAS'), (3, '0003POWER', 'POWER POINT', '3 SEMANAS'), (4, '0004PUBLI', 'PUBLISER', '3 SEMANAS'), (5, '0005INTER', 'INTERNET', '2 SEMANAS'), (6, '0006ACCE', 'ACCESS', '4 SEMANAS'); -- -------------------------------------------------------- CREATE TABLE `pagos` ( `id_pago` int(3) NOT NULL, `id_curso` int(11) DEFAULT NULL, `monto` decimal(7,2) DEFAULT NULL, `fecha` date DEFAULT NULL, `cantidad` int(2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; -- -- Volcado de datos para la tabla `pagos` -- INSERT INTO `pagos` (`id_pago`, `id_curso`, `monto`, `fecha`, `cantidad`) VALUES (1, 1, '20.00', '2018-05-30', 1), (2, 1, '30.00', '2018-05-31', 1), (3, 2, '40.00', '2018-05-31', 1), (4, 2, '100.00', '2018-05-31', 1), (5, 3, '25.00', '2018-05-30', 1), (6, 3, '50.00', '2018-05-31', 1), (7, 4, '60.00', '2018-05-31', 1), (8, 4, '80.00', '2018-05-31', 1), (9, 5, '27.00', '2018-05-30', 1), (10, 5, '49.00', '2018-05-31', 1), (11, 6, '90.00', '2018-05-31', 1), (12, 6, '90.00', '2018-05-31', 1); -- -- Índices para tablas volcadas -- -- -- Indices de la tabla `curso` -- ALTER TABLE `curso` ADD PRIMARY KEY (`id_curso`); -- -- Indices de la tabla `pagos` -- ALTER TABLE `pagos` ADD PRIMARY KEY (`id_pago`); -- -- AUTO_INCREMENT de las tablas volcadas -- -- -- AUTO_INCREMENT de la tabla `curso` -- ALTER TABLE `curso` MODIFY `id_curso` int(2) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; -- -- AUTO_INCREMENT de la tabla `pagos` -- ALTER TABLE `pagos` MODIFY `id_pago` int(3) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;
La Tabla Cursos
Tabla Pagos
Fichero conexion.php
Este será encargado de realizar la conexión con el servidor
<?php $servidor= "localhost"; $usuario= "root"; $password = ""; $nombreBD= "php_union"; ?>
Index.php
Aquí se mostrara el formulario para realizar la búsqueda y también mostrara resultados de la base de datos MySQL
<ul class="list-group"> <li class="list-group-item"> <form method="GET"> <div class="form-row align-items-center"> <div class="col-auto"> <label class="sr-only" for="inlineFormInput">Curso</label> <input name="curso" type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Ingrese curso"> <input name="buscar" type="hidden" class="form-control mb-2" id="inlineFormInput" value="v"> </div> <div class="col-auto"> <button type="submit" class="btn btn-primary mb-2">Buscar Ahora</button> </div> </div> </form> </li> </ul>
El código PHP encargado de procesar la palabra clave enviada a través del formulario
<?php include('conexion.php'); $conn = new mysqli($servidor, $usuario, $password, $nombreBD); if ($conn->connect_error) { die("la conexión ha fallado: " . $conn->connect_error); } if(isset($_GET["curso"])){ $pbu=$_GET["curso"]; } if(isset($_GET["buscar"])){ $sqln=mysqli_query($conn, "SELECT t1.id_pago, t1.monto, t1.fecha,t1.cantidad, t2.nombre_curso FROM pagos t1 INNER JOIN curso t2 ON t1.id_curso=t2.id_curso WHERE t2.nombre_curso LIKE '%$pbu%' order by t1.id_pago desc") or die(mysqli_error()); } ?> <table class="table"> <thead> <tr> <th scope="col">#</th> <th scope="col">Curso</th> <th scope="col">Monto</th> <th scope="col">Cantidad</th> <th scope="col">Fecha</th> </tr> </thead> <?php if(isset($_GET["buscar"])){ $n=0; while ($dato=mysqli_fetch_array($sqln)) { $n++; echo"<tbody>"; echo"<tr>"; echo"<th scope='row'>".$n."</th>"; echo"<td>".$dato['nombre_curso']."</td>"; echo"<td>".$dato['monto']."</td>"; echo"<td>".$dato['cantidad']."</td>"; echo"<td>".$dato['fecha']."</td>"; echo"</tr>"; echo" </tbody>"; } } ?> </table>

CONCLUSIÓN
Hoy en día casi todo la información de una empresa y/o organización se almacenan en una base de datos. Sin embargo, se puede utilizar varios gestores de almacenamiento.
En este ejemplo estamos usando MySQL y lo que deseamos es optimizar los resultados a través de una consulta SQL. Por lo tanto, estamos usando la sentencia INNER JOIN para poder unir dos tablas y realizar una búsqueda precisa.
Les dejare el ejemplo completo para que puedan descargar esta pequeña muestra y que ustedes pueden modificar de acuerdo a sus necesidades.
Esta forma de realizar consultas es muy usada en la mayoría de programadores para lograr un trabajo eficiente.