Consulta a multiples tablas en MySQL

Hola expertos.

Estoy intentando relacionar tablas e imprimirlas en php, pero no lo consigo.

tengo dos tablas:

<TABLA "usuarios">

- id - nombre - apellidos - telefono -

- 1 - Jose - Agapito - 123456789 -

- 2 - Ana - Mariana - 987654321 -

<TABLA "email">

- id - user_id - email -

- 1 - 1 - [email protected] -

- 2 - 1 - [email protected] -

- 3 - 2 - [email protected] -

- 4 - 2 - [email protected] -

Este es un ejemplo de las tablas.

ahora puesto en php:

$consulta = $sql->query("SELECT * FROM `usuarios`, `email`");

while($res = $consulta->fetch_array(MYSQLI_BOTH)){

contenido...

}

como realizo la consulta exactamente y como luego lo pongo en php en el while para que por ejemplo salgan los dos nombres con sus dos correos electronicos respectivamente.

saludos.


        

2 respuestas

Respuesta
1

La consulta no está bien, tienes que indicar la relación de campos de las tablas:

$sql = "SELECT nombre, email FROM usuarios, email WHERE usuarios.id = email.user_id";$result = $sql->->query($sql);while($row = $result->fetch_assoc()) {echo $row["nombre"] . "  -> " . $row["email"] . "<br>";}

No lo he probado, y hay formas de hacerlo, pero esto yo creo que funciona bien. Una mejora seria usar joins en la consulta sql, pero es algo más complejo.

Muchas gracias. Pero mi problema es que mis tablas tienen almenos 7 campos cada una y me cuesta mucho relacionarlas y luego imprimirlas en el php.

Mi solucion: e puesto otro fetch_array dentro del while :D .

while($res = $consulta->fetch_array(MYSQLI_ASSOC)){

$get_email = $sql->query("SELECT * FROM `email` WHERE `user_id` = '$res['id']'");

$get_email = $get_email->fetch_array(MYSQLI_ASSOC);

echo $res['nombre']." ".$res['apellidos']." ".$get_email['email'];

}

Esta es mi solucion, parece absurda pero la llevo mejor :P.

Saludos, y gracias de nuevo.

Respuesta
1

Para un futuro, aquí tienes la consulta optimizada:

$consulta = "SELECT nombre,apellidos,email FROM usuarios INNER JOIN email on usuarios.id=email.user_id";

$result = $sql->query($consulta);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "nombre: " . $row["nombre"]. " - apellido: " . $row["apellido"]. " - email: " . $row["email"]. "<br>";
    }
} else {
    echo "sin resultados";
}

Gracias por la aclaracion, pero e probado tu codigo y no me funciona, supongo que lo estare haciendo mal.

Mira te pongo mi codigo.

<TABLA "phone">

- id - date_creation - type - user_id - imei_serial - status - accesories - obs - brand - model - waranty - code -

<TABLA "client">

- id - phone_id - first_name - last_name - email - phone - nif_pass - lang -

Mi codigo

if(isset($_GET['search'])){

   $s = $_GET['search'];

   $getphones = $sql->query("SELECT `imei_serial`,`brand`,`model`,`code`,`first_name`,`last_name`,`email`,`phone`,`nif_pass` FROM `".PREFIX."phone` INNER JOIN `".PREFIX."client` ON `".PREFIX."phone`.`id` = `".PREFIX."client`.`phone_id` WHERE `imei_serial` LIKE '$s' OR `brand` LIKE '%$s%' OR `model` LIKE '%$s%' OR `code` LIKE '$s' OR `firs_name` LIKE '%$s%' OR `last_name` LIKE '%$s%' OR `phone` LIKE '%$s%' OR `nif_pass` LIKE '%$s%' OR `email` LIKE '%$s%' ORDER BY `id` DESC LIMIT ".$page_phone_limit[0].",".$page_phone_limit[1]);
                            }

No he probado tu código, pero he visto un error.

Las dos tablas tienen campo id. Cuando pones ORDER BY id - mysql no sabe a que tabla te refieres. Tienes que poner ORDER BY PREFIX. Phone. Id.

Dime si con esto se arregla...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas