Ir para conteúdo
Fórum Script Brasil
  • 0

AJUDA COM JOIN - PHP -


Anderson Baldner

Pergunta

bem pessoal,meu problema é o seguinte...eu estou programando mais para estudo mesmo,uma espécie de fórum,sendo que eu queria implementar nesse fórum,um sistema de profile.até ai tudo certo...já fiz os códigos pra adicionar,ler,apagar e editar os perfis,mais eu queria adicionar ainda a possibilidade de adicionar outros membros do fórum como amigos...eu já desenvolvi a´te a parte q aparece a mensagem na página inicial do usuário logo assim q ele entra,que tem alguém pedindo pra ser adicionado...mais o problema é só 1:

como exibir os amigos que o cara adicionar e/ou aceitar?

creio eu,q o apropriado pra esse caso,seja o INNER JOIN,só q eu já testei de td e não funciona d jeito nenhum ¬¬

o código SQL da tabela q eu tenho aqui são esses:

CREATE TABLE IF NOT EXISTS `perfil` (
  `ID` int(11) NOT NULL auto_increment,
  `Nome` varchar(100) NOT NULL,
  `Apelido` varchar(50) NOT NULL,
  `Datanasc` varchar(10) NOT NULL,
  `Estado` varchar(100) NOT NULL,
  `Cidade` varchar(100) NOT NULL,
  `Pais` varchar(100) NOT NULL,
  `Descr` text NOT NULL,
  `Email` varchar(100) NOT NULL,
  `Sexo` varchar(10) NOT NULL,
  `Login` varchar(50) NOT NULL,
  `Senha` varchar(50) NOT NULL,
  `Foto` varchar(255) NOT NULL default 'imagens/padrão.JPG',
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11;
a tabela AMIGOS
Estrutura da tabela `amigos`
--

CREATE TABLE IF NOT EXISTS `amigos` (
  `Add` bigint(11) NOT NULL,
  `Added` bigint(11) NOT NULL,
  `Status` int(3) NOT NULL,
  `Msg` text NOT NULL,
  UNIQUE KEY `FriendPair` (`Add`,`Added`),
  KEY `Add` (`Add`),
  KEY `Added` (`Added`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
aqui vai o código q estou usando pra "listar",só q ele não funciona corretamente...estou usando esse código em uma arquivo PHP externo das páginas do fórun que estou escrevendo,porque essa exibição é feita pelo ajax.
<?php

header("Content-Type: text/html; charset=ISO-8859-1",true);
include "valida_session.php";
include "conecta_db.php";
$_pagi_sql = "SELECT * FROM amigos";

$_pagi_cuantos = 10;            //quantidade de registros por pagina
$_pagi_nav_anterior = "anterior";    //string para anterior
$_pagi_nav_siguiente = "seguinte";    //string para seguinte
$_pagi_nav_primera = "primeira";    //string para primeira
$_pagi_nav_ultima = "última";        //string para última
$_pagi_nav_estilo = "paginacao";    //aqui é a classe do CSS para a barra de paginação

require("paginator.inc.php");

while($l = mysql_fetch_array($_pagi_result)){
    $add     =ucfirst($l[0]);
    $added        = ucfirst($l[1]);
    
$sqlite = "SELECT * FROM amigos INNER JOIN perfil ON ( amigos.Add = perfil.ID OR amigos.Added = perfil.ID ) WHERE  ( amigos.Add = $userid OR amigos.Added = $userid ) AND amigos.Status = 1";
$sqlite_query = mysql_query($sqlite);
while($p = mysql_fetch_array($sqlite_query)){
    $id     = ucfirst($p[0]);
    $navio        = ucfirst($p[1]);
    $apelido        = ucfirst($p[2]);
    $foto    = ucfirst($p[12]);
echo "$id / $navio / $apelido";
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<center><a href=perfil.php?perfil=$id ><img src=\"imagens/$foto\" alt=\"\" 

border=\"0\" name=\"imagem1\" width=\"110\" height=\"90\"><br>$apelido</center></a>&nbsp;";
}
}
echo "</table>";

//incluimos a paginação
echo"<p><a href=\"amigos.php\"><div align=right> >>Ver Todos</div></a></p>";


?>

essa lógica me parece "certa" , mais ela não ta funfando

alguém pode dar uma mãozinha aê? :huh:

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

como assim?

na tabela amigos,ta ficando mais ou menos assim:

Add | Added | Status | Msg

na coluna add,fica a id de quem adicionou e na added quem foi adicionado...na Status,estou separando por 0 e 1 se a mensagen foi aceita ou ainda está pendente; e na msg,é so um espaço para a pessoa digitar um texto de "reconhecimento" para enviar junto com o pedido de adicionar.

no final,com dados adicionados,ta ficando td mais ou menos assim:

Add | Added | Status | Msg |

7 8 0 me add ai camarada

10 7 0 away!

8 10 0 me add?

supondo q o ID do usuário seja 7...

eu tenho q fazer a relação entre as tabelas,pra consulta me retornar os valores 8 e 10 como amigos,já q são os unicos em comum com o valor do ID do usuário. ou não seria assim a lógica??

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Anderson Baldner'!

Pelo que entendi você está querendo fazer um relacionamento muitos para muitos na tabela "perfil". Onde um elemento desta tabela pode ter vários amigos (que pertencem a esta tabela) e, também, pode ser "amigo" de vários elementos desta tabela.

Você tentou o código:

$sqlite = "SELECT * FROM amigos INNER JOIN perfil ON ( amigos.Add = perfil.ID OR amigos.Added = perfil.ID ) WHERE ( amigos.Add = $userid OR amigos.Added = $userid ) AND amigos.Status = 1";
que não funcionou.

Para funcionar, seu raciocínio deve seguir o seguinte:

SELECT * FROM perfil p
INNER JOIN amigos a ON a.add = p.id
INNER JOIN perfil pa ON pa.id = a.added
WHERE p.id = $userid

Traduzindo: Para o um determinado "fulano" (p.id = $userid), ache todos os amigos dele (pa.id = a.added).

Para que esta instrução funcione sem problemas, substitua `Add` bigint(11) NOT NULL e `Added` bigint(11) NOT NULL, por

`Add` int(11) NOT NULL, `Added` int(11) NOT NULL.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...