Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Então, tenho uma tabela que indica os usuários que são amigos.
ela possue 4 campos: ID, ID_UM, ID_DOIS e ACEITO
ID é o ID da amizade;
ID_UM é o id de quem enviou o pedido de amizade;
ID_DOIS é o id de quem recebeu e
ACEITO verifica se a amizade proposta já foi aceita.
Na tabela de login, criei um campo chamado "ULT_LOG_ID", que serve para verificar os últimos usuários logados.
Fiz uma query que pegava os amigos de certo ID, com um comando php ela ficou assim:
$amigo = mysql_query("SELECT * FROM `amigos` WHERE (`ID_DOIS`='$perfil_id' OR `ID_UM`='$perfil_id') AND `ACEITO`='1'", $sql);
$linha = mysql_fetch_array($amigo);
$id_um = $linha['ID_UM'];
$id_dois = $linha['ID_DOIS'];
if($id_um == $perfil_id){ $id_amigo = $linha['ID_DOIS']; }
if($id_dois == $perfil_id){ $id_amigo = $linha['ID_UM']; }
Ela funciona certinho.
Mas agora estava tentando fazer aparecer os últimos 5 amigos logados e não consegui.
A idéia é fazer um relacionamento da tabela amigos e da tabela login...
A consulta deveria pegar os IDs dos amigos da tabela (como na consulta acima) e relacionar com os IDs da tabela login, ordenando por ULT_LOG_ID decrescente.
Obrigado pela atenção ^^
consegui fazer uma query assim:
SELECT amigos.ID_UM, amigos.ID_DOIS, amigos.ACEITO, login.ID, login.NICK, login.ULT_LOGH, login.ULT_LOGD, login.ULT_LOGID FROM amigos , login WHERE (amigos.ID_UM = login.ID AND amigos.ID_UM != $id) OR (amigos.ID_DOIS = login.ID AND amigos.ID_DOIS != $id) AND amigos.ACEITO = '1' GROUP BY login.ID ORDER BY login.ULT_LOGID DESC LIMIT 5
grandinho, mas funfou ^^"
Se entendi seu BD direto basta colocar outros OR junto de ID_DOIS, ID_UM e etc até CINCO. Certo?
Mas pra lhe poupar código, se os ID's são números usei WHERE
campoIN(1,2,3,4,5)Se for string até dá pra fazer colocando aspas entre as strings, mas isso é outra história.