Query con dos tablas mysql

Estoy tratando de hacer una consulta en dos tablas a partir de un ID...

Me explico...

Tengo una tabla HTML que al darle click me manda a otra página mostrando los datos de la tabla de mi bd

<td>
<a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['noexp']; ?></a>
</td>

Hasta aquí todo va bien me redirige a searchexp.php y me muestra los datos de esa fila de la tabla registro...

if (isset($_GET['id'])) {
        $sql = 'SELECT * FROM registro WHERE noexp = ?';
        $stmt = $conn->prepare($sql);
        $results = $stmt->execute(array($_GET['id']));
        $row = $stmt->fetch();
        if (empty($row)) {
            $result = "No se encontraron resultados !!";
        }
<input disabled="disabled" value="<?php echo $row['nombres']; ?>" type="text" name="nombres" type="text" style="width: 194px;">
<input disabled="disabled" value="<?php echo $row['appaterno']; ?>" type="text"name="appaterno" type="text" style="width: 180px;">
<input disabled="disabled" value="<?php echo $row['apmaterno']; ?>" type="text"name="apmaterno" type="text" style="width: 170px;">
<input disabled="disabled" value="<?php echo $row['edocivil']; ?>" type="text"name="edocivil" type="text" style="width: 170px;">
<input disabled="disabled" value="<?php echo $row['sexo']; ?>" type="text" name="sexo" type="text" style="width: 180px;">

los datos me los muestra perfecto...

Mi detalle es, cuando guardo datos en este caso el No Expediente lo hago en dos tablas, registro y responsable, en el caso de arriba jalo los datos de la tabla registro, quisiera jalar datos de la tabla responsable la cual contiene el mismo No Expediente..

He tratado de buscar en google y hago algunas consultas que encuentro pero no me muestra los datos

1 respuesta

Respuesta
1

Debería valerte con hacer un INNER JOIN entra las dos tablas:

SELECT rg.*, re.* FROM registro rg INNER JOIN responsable re 
ON re.noexp = rg.noexp
WHERE rg.noexp = ?

Esta consulta obtendría todos los valores de las dos tablas cuyo "noexp" coincida.

Luego, para acceder a un valor en concreto para el input, deberías usar el identificador de tabla (en mi ejemplo he llamado "rg" a registro y "re" a responsable):

<input disabled="disabled" value="<?php echo $row['rg.nombres']; ?>" type="text" name="nombres" type="text" style="width: 194px;">

¡Gracias! Víctor en verdad me sirvió de mucho ya obtengo los datos de las dos tablas solo como duda, ¿puedo hacer eso mismo para jalar de tres o cuatro tablas?

Saludos

De las que quieras siempre y cuando puedas relacionarlas por el mismo campo del INNER JOIN

Ok Perfecto amigo te agradezco muchísimo Excelente!

Hola perdón por reabrir la pregunta solo que me atore en la consulta para tres tablas el ejemplo que me pasaste lo acomode super bien solo que ahora pongo las tres tablas y no se si estoy mal en la sintaxis o algo pudieras ayudarme por favor el código que yo  pongo es el siguiente...

Tengo una consulta de tres tablas donde me muestra los datos en una tabla html

$sql = 'SELECT rg.*, re.*, co.* FROM registro rg INNER JOIN responsablepac re INNER JOIN consultas co WHERE status = 0';

Me va de maravilla me muestra datos de las tres tablas...

El detalle es en la pregunta pero ahora con tres tablas hago lo mismo con el ejemplo que me diste y no me aparece ningún dato...

$sql = 'SELECT rg.*, re.*, co.* FROM registro rg INNER JOIN responsablepac re INNER JOIN consultas co
ON re.noexp = rg.noexp
ON co.noexp = rg.noexp
WHERE rg.noexp = ?';

y no me muestra ningún dato que estoy haciendo mal

de antemano muchas gracias 

saludos, buenas noches

Jejeje perdon despues de jugar un poco con las sentencias hice esto:

$sql = 'SELECT rg.*, re.*, co.* FROM registro rg INNER JOIN responsablepac re INNER JOIN consultas co
ON re.noexp = rg.noexp
WHERE rg.noexp = ?';

solo le quite... 

ON co.noexp = rg.noexp

y me funciono de maravilla espero no atorarme mas adelate muchas gracias hermano saludos

Ahhhhh perdón amigo otra vez yo..... solo tenia un dato capturado en la bd hice la captura de datos y tengo ya dos registros ...

en la consulta que te hago arriba para mostrar la tabla html

$sql = 'SELECT rg.*, re.*, co.* FROM registro rg 
                INNER JOIN responsablepac re 
                INNER JOIN consultas co WHERE co.status = 0';
$result = $conn->query($sql);
$rows = $result->fetchAll();

me funciono de maravilla con un registro me muestra datos de las tres tablas pero ahorita que capture otro me muestra datos triplicados 

obvio son datos ficticios de prueba...

el código que tengo para la muestra de esos datos es:

        <table border="1" >
        <thead>
            <tr>
                <th>Expediente</th>
                <th>Nombre</th>
                <th>Apellidos</th>
                <th>Apellidos</th>
                <th>Responsable</th>
                <th>Lugar de Accidente</th>
            </tr>
        </thead>
        <tbody>
        <?php
            foreach ($rows as $row) {
        ?>
            <tr>
                <td><a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['noexp']; ?></a></td>
                <td><a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['nombres']; ?></a></td>
                <td><a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['appaterno']; ?></a></td>
                <td><a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['apmaterno']; ?></a></td>
                <td><a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['resparentesco']; ?></a></td>
                <td><a href="searchexp.php?id=<?php echo $row['noexp']; ?>"><?php echo $row['lugaraccidente']; ?></a></td>
            </tr>
        <?php } ?>
        </tbody>
    </table>

noexp, nombre, appateno y apmaterno pertenecen a la tabla registro

resparentesco pertenece a la tabla responsablepac

lugaraccidente pertenece a la tabla consultas

meteré mas datos de las tres tablas para que lo muestre aquí pero por ahora solo son pruebas pero me triplica los datos pudieras ayudarme en que estoy mal por favor

Gracias

Si no colocas la clausula ON para indicar como se relacionan las tablas la consulta no se puede cruzar correctamente.

Debe ser algo así como:

SELECT rg.*, re.*, co.* FROM registro rg 
 INNER JOIN responsablepac re ON rg.noexp = re.noexp
 INNER JOIN consultas co ON re.noexp = co.noexp
WHERE co.status = 0';

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas