Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta MYSQL con JOIN complejo con varias tablas

Estas en el tema de Consulta MYSQL con JOIN complejo con varias tablas en el foro de PHP en Foros del Web. Buenas tardes! Es la primera vez que os escribo, estoy empezando con PHP y MySQL y sé lo básico, pero me las voy apañando con ...
  #1 (permalink)  
Antiguo 18/04/2016, 07:34
Avatar de sarole  
Fecha de Ingreso: diciembre-2013
Ubicación: Madrid
Mensajes: 6
Antigüedad: 10 años, 4 meses
Puntos: 0
Consulta MYSQL con JOIN complejo con varias tablas

Buenas tardes!

Es la primera vez que os escribo, estoy empezando con PHP y MySQL y sé lo básico, pero me las voy apañando con lo que encuentro en la documentación y en las dudas resueltas del foro, solo que no encuentro solución a mi problema ahora.

Tengo una aplicación sencilla para consultar las estadísticas del programa PHPList que hace envíos PHP de emails masivos.

He conseguido todo lo que quería, pero me he atascado en los detalles de los clicks.

El caso es que un mensaje X recibe N clicks en el enlace que se manda, y recupero una tabla donde aparecen solamente los usuarios que hacen click. El caso es que necesito relacionar al usuario con el nombre, teléfono y código de cliente, que son datos que están en otra tabla y ya me he liado.

Tengo 3 tablas distintas de las que recuperar los datos.

En la tabla phplist_linktrack_uml_click tengo almacenado el messageid y userid de los usuarios que hacen click y lo he relacionado con la tabla phplist_user_user donde tengo de nuevo la id de usuario y además el email. Estos datos se muestran bien.

El problema es que el resto de los datos estan en phplist_user_user_attribute guardados de la siguiente forma:

attributeid userid value
0 1 Fulano
1 1 666666666
2 1 Cliente 10


¿Qué debería añadir al código para que me seleccione en cada línea el nombre, el teléfono y el código de cliente?

Os inserto el código que tengo hasta ahora:

Código:
<?php
$servername = "localhost";
$username = "********";
$password = "********";
$dbname = "phplist";

// Conexion a la base de datos
$conn = new mysqli($servername, $username, $password, $dbname);
// Comprobar la conexion
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

setlocale(LC_TIME, 'es_ES');

$val = $_REQUEST['valor'];

$sql = "SELECT phplist_linktrack_uml_click.messageid, phplist_user_user.id, phplist_user_user.email  
FROM phplist_linktrack_uml_click 
INNER JOIN phplist_user_user 
ON phplist_linktrack_uml_click.userid=phplist_user_user.id 
WHERE messageid = '$val'";

$result = $conn->query($sql);

echo "<link rel=\"stylesheet\" href=\"1.css\" type=\"text/css\" >"; 

if ($result->num_rows > 0) {
    echo "<table class=normal>
		<tr>
		<th>Usuario</th>
		<th>Email</th>
		<th>Nombre</th>
		<th>Telefono</th>
		<th>Clase</th>
		</tr>";
    // obtener los datos de cada row
    while($row = $result->fetch_assoc()) {
        echo "<tr>
			<td class=nombre>".$row["id"]."</td>
			<td class=email>".$row["email"]."</td>
			<td class=nombre></td>
			<td class=tlf></td>
			<td class=codigo></td>
		</tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>
Muchas gracias de antemano, el foro siempre me ayuda mucho a aprender.
  #2 (permalink)  
Antiguo 18/04/2016, 07:49
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

Haz 3 joins con la misma tabla, uniendo por el id de usuario, y por el id de atributo:

LEFT JOIN phplist_user_user_attribute attr_name ON attr_name.attributeid=0 AND attr_name.userid= phplist_user_user.id
LEFT JOIN phplist_user_user_attribute attr_tel ON attr_tel.attributeid=1 AND attr_tel.userid=
phplist_user_user.id
LEFT JOIN phplist_user_user_attribute attr_codcli ON attr_tel.attributeid=2 AND attr_codcli.userid= phplist_user_user.id
  #3 (permalink)  
Antiguo 18/04/2016, 08:22
Avatar de sarole  
Fecha de Ingreso: diciembre-2013
Ubicación: Madrid
Mensajes: 6
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

Muchas gracias por la respuesta.

Eso es exactamente lo que necesito, pero cómo lo puedo introducir en mi código? Tendría que hacer dos consultas distintas?

El problema es que no se integrar esas dos consultas en la tabla que tengo hecha.

Un saludo
  #4 (permalink)  
Antiguo 18/04/2016, 08:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

TE está poniendo todo el JOIN en una sola query... obviamente lo que tienes que hacer es reemplazar lo que tienes por lo que te propone...
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/04/2016, 08:40
Avatar de sarole  
Fecha de Ingreso: diciembre-2013
Ubicación: Madrid
Mensajes: 6
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

Gracias gnzsoloyo por tu respuesta, pero si reemplazo el query que tengo por el que me propone dashtrash no obtengo los datos principales que necesitaba, que son los usuarios que han hecho click. Yo necesito que en el query que ya tengo se añada la consulta del nombre, teléfono y código de cliente.

Si reemplazo una cosa por la otra no tengo los usuarios que han hecho click, ya que solo está usando los datos de la tabla phplist_user_user_attribute.

El problema que tengo es cómo introduzco eso en mi código y le hago echo en la tabla que ya tengo.
  #6 (permalink)  
Antiguo 18/04/2016, 08:54
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

Código SQL:
Ver original
  1. "SELECT phplist_linktrack_uml_click.messageid, phplist_user_user.id, phplist_user_user.email  
  2. FROM phplist_linktrack_uml_click
  3. INNER JOIN phplist_user_user
  4. ON phplist_linktrack_uml_click.userid=phplist_user_user.id
  5. LEFT JOIN phplist_user_user_attribute attr_name ON attr_name.attributeid=0 AND attr_name.userid= phplist_user_user.id
  6. LEFT JOIN phplist_user_user_attribute attr_tel ON attr_tel.attributeid=1 AND attr_tel.userid=
  7. phplist_user_user.id
  8. LEFT JOIN phplist_user_user_attribute attr_codcli ON attr_tel.attributeid=2 AND attr_codcli.userid= phplist_user_user.id
  9. WHERE messageid = '$val'";
Sólo queda hacer que muestre los campos en el select....
  #7 (permalink)  
Antiguo 18/04/2016, 09:12
Avatar de sarole  
Fecha de Ingreso: diciembre-2013
Ubicación: Madrid
Mensajes: 6
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

He probado con ese código también pero no me devuelve el nombre, ni el teléfono ni el código de cliente, me hace la consulta incluyendo solamente la ID de usuario y el email.
He probado haciendo la consulta en la base de datos en SQL directamente y tampoco. ¿Qué puede estar mal?
  #8 (permalink)  
Antiguo 18/04/2016, 09:14
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

Que no estás seleccionando los campos, que es lo que te he puesto en el comentario anterior....
Si solo seleccionas esos campos, sólo te muestra esos campos.Lo que te he puesto es el join.
Es tan simple como poner attr_name.vale as name, att_tel.value as telefono, etc,etc
O pon select * y mira lo que te devuelve.
  #9 (permalink)  
Antiguo 18/04/2016, 10:24
Avatar de sarole  
Fecha de Ingreso: diciembre-2013
Ubicación: Madrid
Mensajes: 6
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL con JOIN complejo con varias tablas

Gracias! Perdona por mi error pero es que soy novatilla aún. Jajajaja.

Muchas gracias por la implicación. Ya he solucionado el problema! :)

Etiquetas: inner-join, join, mysql, phplist
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:05.