Disculpadme por el post anterior, estaba algo alterado por otras cosas y he soltado mi enfado en el post.
De verdad que no quiero faltarle el respeto a nadie ni criticar su opinión o forma de ver las cosas.
Continuemos con el problema.
He estado buscando alternativa con JOIN pero no encuentro cómo hacerlo exactamente.
Voy a dar más detalles de mi tabla y postear el código que uso actualmente.
Tabla amistades (estructura y ejemplos):
Código:
id_usuario_origen | id_usuario_destino | estado
4r33e4er 9o2w56wd aceptado
9o2w56wd 2w0p98kw pendiente
9o2w56wd 6tt5x2h9 aceptado
En id_usuario_origen va el id de la persona que ha enviado la petición de amistad.
En id_usuario_destino va el id de la persona que a la que iba dirigida la petición de amistad.
En estado va el estado de la petición de amistad; es decir si ha sido aceptada, rechazada o todavía está pendiente de aceptar o no por el usuario al que iba dirigida (en id_usuario_destino).
Tabla usuarios (estructura simplificada y ejemplos):
Código:
id_usuario | nombre_usuario
4r33e4er Pepito
9o2w56wd Adrian
2w0p98kw Fulanito
6tt5x2h9 Marta
Ahora imaginemos que yo soy Adrian, con id 9o2w56wd y quiero ver mi lista de todos mis amigos.
Pues este es el código que uso actualmente para hacer eso:
Código PHP:
<?php
require("data.php");
$id_usuario = '9o2w56wd';
$conexion = mysqli_connect("$servidormysql","$usuariomysql","$passmysql","$basededatos");
$consulta_amigos = mysqli_query($conexion,"SELECT * FROM amistades WHERE id_usuario_origen = '".mysqli_real_escape_string($conexion,$id_usuario)."' AND estado = 'aceptado'");
$consulta_amigos2 = mysqli_query($conexion,"SELECT * FROM amistades WHERE id_usuario_destino = '".mysqli_real_escape_string($conexion,$id_usuario)."' AND estado = 'aceptado'");
$column = array();
while($array_amigos = mysqli_fetch_array($consulta_amigos2)) {
$column[] = $array_amigos[1];
}
$column2 = array();
while($array_amigos = mysqli_fetch_array($consulta_amigos)) {
$column2[] = $array_amigos[2];
}
$lista_de_amigos = array_merge($column, $column2);
sort($lista_de_amigos);
foreach ($lista_de_amigos as $listar_amigos) {
$nombre_amigo = mysqli_fetch_array(mysqli_query($conexion,"SELECT nombre_usuario FROM usuarios WHERE id_usuario = '".mysqli_real_escape_string($conexion,$listar_amigos)."'"));
echo $nombre_amigo['nombre_usuario'].'<br>';
}
?>
Esto me mostraría la siguiente lista de acuerdo con los datos que he puesto de ejemplo en la tabla amistades:
Inicié este post para encontrar una forma de hacer lo mismo de manera sencilla y con el menor número de consultas posible, para que sea más rápido.
Como se puede ver en el código estoy haciendo dos consultas, una para cada columna y luego tantas consultas como amigos tenga el usuario en el bucle foreach para obtener el nombre del usuario de la tabla usuarios apartir de los ids del array $lista_de_amigos.
Llevo bastante tiempo buscando la mejor solución, y no se me ocurre. Seguro que es una tontería.
Lo único que se me ha ocurrido es solucionar lo de las consultas en el bucle foreach haciendo un explode en el array $lista_de_amigos y usando IN en la consulta SQL pero no sé si tendrá algún tipo de límite la consulta o si es la mejor solución.
Espero que me puedan ayudar, gracias.