Ver Mensaje Individual
  #10 (permalink)  
Antiguo 24/12/2012, 09:46
Avatar de Adrii952
Adrii952
 
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 3 meses
Puntos: 7
Respuesta: Eliminar valores de un array / Listar array / MySQL

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:
Código:
Marta
Pepito
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.

Última edición por Adrii952; 24/12/2012 a las 09:53