xhicco 0 Denunciar post Postado Abril 30, 2010 olá a todos eu gostaria de saber como crio a sintaxe sql de amigos em comum similar ao que tem no orkut, estou desenvolvendo um site em asp com mysql esta ficando bom mas esta sintaxe esta me deixando louco pois nao estou conseguindo monta-la alguem pode me ajudar? ai vao as especificações: no banco de dados tenho a seguinte estrutura: tabela membros uid - autonumeraçao(este tb é o uid do usuario) nome sobrenome foto etc ------------------------------------------------ tabela amigos id - autonumeraçao para - este é o id de quem o usuario quer add de - este é o id de que adicionou ------------------------------------------------ agora é o seguinte tenho a pagina perfil nesta pagina se eu estiver na pagina de uma pessoa qualquer e se nos tivermos amigos em comum devera mostra-la nesta pagina por exemplo se meu uid é 19 e estou na pagina da pessoa com uid 20 e se ambos somos amigos de 30 devera mostrar no perfil do 20 que somos amigos em comum de 30 entenderam? obs: para buscar meu uid eu recupero de uma session Session("uid_usuario") = rs("uid") e para recuperar o uid do perfil da pessoa eu recupero de uma querystring ficando assim http://meusite/perfil.asp?uid=20 se alguem puder me ajudar a montar esta string SQL eu ficaria muito grato obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 1, 2010 da um exemplo nas tabelas q a gente ajuda Compartilhar este post Link para o post Compartilhar em outros sites
xhicco 0 Denunciar post Postado Maio 1, 2010 como assim exemplo nas tabelas? =/ ai em cima eu ja expliquei que ha duas tabelas... a tabela "membros" e a tabela "amigos" eu gostaria de buscar só os amigos em comum de dois usuarios similar ao do orkut... a busca de amigos de um determinado usuario eu ja consegui montar vejam a string: strSQL="SELECT amigos.para,amigos.de,membros.uid,membros.nome,membros.foto,membros.hora_login FROM membros STRAIGHT_JOIN amigos ON membros.uid = amigos.para and amigos.para <> '" & uid & "' or membros.uid = amigos.de and amigos.de <> '" & uid & "' where amigos.para = '" & uid & "' or amigos.de = '" & uid & "' ORDER BY hora_login DESC" agora preciso fazer uma busca de amigos em comum entre dois usuarios entendem? sopondo como disso de se meu uid é 19 e o uid da pessoa que estou visitando é 80 e nós dois somos amigos de 30 deve aparecer na pagina de perfil de 80 que somos amigos de 30 sacaram? sendo que no banco de dados esta assim: tabela membros: uid nome 19 Xhicco 84 Andreé 30 Marina tabela amigos: id de para 1 84 30 2 30 19 percebem que 19 e 80 sao amigos de 30? como eu montaria a string para fazer esta busca... lembrando que tem que rolar um inner entre essas duas tabelas... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Maio 1, 2010 nao tem q rolar inner de nada.... select de from ( select de, para from amigos UNION select para,de from amigos )z group by de having group_concat(para) IN (19,84) Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 1, 2010 Procure a SqlMagazine nº 38 tem um artigo sobre como criar uma rede tipo Orkut que pode lhe ser útil , tem uma base de teoria. Compartilhar este post Link para o post Compartilhar em outros sites
xhicco 0 Denunciar post Postado Maio 1, 2010 mas giesta tem que ter um join pois eu busco alguns valores na tabela membros... como o uid,nome,sobrenome do usuario a foto... etc entendeu? e outra coisa... nesta parte da string que você me passou "group by de having group_concat(para) IN (19,84)" como eu colocaria esses dois usuarios no IN poderia ser assim "group by de having group_concat(para) IN ("'& uid &'","'& usuario &'")" ou eu teria que montar um array? o complicado é que nao sei montar array =/ ainda nao testei esta string vou testa-la depois posto ak o resultado.. ok? e motta o que seria essa "SqlMagazine nº 38" é uma revista? tem como encontrar na net? se nao for pedir muito se vcs puderem me passar algum link eu ficaria agradecido pois é só isto que falta para eu montar meu sistema... abraço a todos... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 1, 2010 Sim é uma revista de papel destas que se vendem em bancas .... :) http://www.devmedia.com.br/post-6902-Revista-SQL-Magazine-Edicao-38.html http://www.devmedia.com.br/post-6082-Artigo-da--net-Magazine-39-Construa-seu-proprio-Orkut-em-ASP-NET.html A base matemática disto é a Teoria dos Grafos. Compartilhar este post Link para o post Compartilhar em outros sites
xhicco 0 Denunciar post Postado Maio 2, 2010 entao mota eu nao sou assinante desta revista... gostaria de algum exemplo mesmo pratico... nao quero que ninguem faça o dever de casa pra mim... mas algumas orientacoes seria de grande valia... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 2, 2010 xhicco eu nunca implementei algo semelhante, lembrei deste assunto pois o artigo me pareceu legal na época e tempos depois respondi tópico semenhante aqui (este assunto parece bombar). As dicas que poderia te passar já o fiz , são a base matemática disto (grafos) e o artigo em questão. Procure aqui no site os tópicos relativos a isso quem sabe a galera que os abriu não pode te passar mais alguma dica. Boa sorte. Compartilhar este post Link para o post Compartilhar em outros sites
xhicco 0 Denunciar post Postado Maio 2, 2010 giesta acabei de testar a string que tu me passastes e nao obtive o resultado desejado... infelizmnte nao era isso o que eu almejava =/ Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 2, 2010 http://forum.imasters.com.br/index.php?/topic/392549-orkut-promova/ Compartilhar este post Link para o post Compartilhar em outros sites
xhicco 0 Denunciar post Postado Maio 18, 2010 pessoal consegui resolver a busca dos amigos em comum... consegui isso montando um array que percorre a SQL, o código segue abaixo pra quem se interessar... gostaria da opinião de vocês referente a performance do código e estrurura... dei um explain da sintaxe SQL no mysql e esta tudo perfeito ele esta usando os índices que eu criei. tabela membros: uid nome foto hora_login tabela amigos id amigo o codigo: este primeiro recordset busca todos os amigos de um determinado usuario e ja aproveita para montar um array: <% strSQL= "SELECT amigos.id,amigos.amigo,membros.uid,membros.nome,membros.foto,membros.hora_login FROM membros INNER JOIN amigos ON membros.uid = amigos.amigo where amigos.id ='84' ORDER BY hora_login DESC" Set rs_ver_amigo = Server.CreateObject("ADODB.Recordset") rs_ver_amigo.CursorLocation = 3 rs_ver_amigo.CursorType = 0 rs_ver_amigo.LockType = 1 rs_ver_amigo.Open strSQL,con counter = rs_ver_amigo.recordcount -1 %> <%If rs_ver_amigo.EOF Then%> nenhum amigo <%Else%> <%If rs_ver_amigo.EOF Then Exit For%> conteudo do recordset a ser exibido <% 'aqui começa a criação do array colocando o valor do campo amigo da tabela amigos na variavel array_amig dentro do loop do recordset ou outra forma que desejar. array_amig = array_amig & rs_ver_amigo("amigo")& "," end If rs_ver_amigo.close Set rs_ver_amigo = Nothing 'aqui se cria o array concatenando todos os resultados. array_amig = Split(Trim(array_amig),",") %> este segundo recordset busca os amigos em comum entre dois usuarios varrendo o array <% SQL="SELECT amigos.id,amigos.amigo,membros.uid,membros.nome,membros.foto,membros.hora_login FROM membros INNER JOIN amigos ON membros.uid = amigos.amigo where amigos.id ='19' and amigos.amigo ='0' " for i = 0 to counter SQL = SQL & " OR amigos.id ='19' and amigos.amigo ='" & array_amig(i) & "'" next SQL = SQL & " ORDER BY hora_login DESC" Set rs_ver_amigo = Server.CreateObject("ADODB.Recordset") rs_ver_amigo.CursorLocation = 3 rs_ver_amigo.CursorType = 0 rs_ver_amigo.LockType = 1 rs_ver_amigo.Open SQL,con counter = rs_ver_amigo.recordcount If rs_ver_amigo.EOF Then Else %> <% end If rs_ver_amigo.close Set rs_ver_amigo = Nothing end if %> OBS:este exemplo diz que o usuario com uid 19 esteja visitando o perfil do usuario com uid 84. lembrando que o recordset não esta completo pois o que me interessa mostrar ak foi como eu montei a busca... ok? peço aos moderadores do site que encerrem o post como resolvido e obrigado a todos que me ajudaram. abraço Compartilhar este post Link para o post Compartilhar em outros sites