guihh25 0 Denunciar post Postado Abril 8, 2016 Olá pessoal, gostaria de saber se é possível e, caso for, como fazer a seguinte busca: Eu tenho uma tabela da seguinte maneira: userid1 / userid2 / descricao Joao / Maria / teste Maria / Joao / teste1 Pedro / Maria / teste2 Maria/ Jose / teste2 Como eu faria para fazer um SELECT que retornaria apenas as linhas abaixo? Que seja considerado que Joao = Maria e Maria = Joao e considerando que eu teria apenas a $variavel Maria Joao / Maria / teste Pedro / Maria / teste2 Maria/ Jose / teste2 Como eu faria isso? Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 8, 2016 Antes de tratar da solução, qual a finalidade? Qual o motivo do mapeamento possuir uma coluna com dois campos usuários? Pergunto isso pois talvez a solução esteja no mapeamento e não na consulta. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 8, 2016 Não entendi o que você quis dizer com João = Maria e Maria = João... Mas olhando o resultado esperado, entendo que a consulta deveria apenas verificar se userid1 é igual a Maria ou userid2 é igual a Maria SELECT campos FROM tabela WHERE userid1 = 'Maria' OR userid2 = 'Maria'; Complementando o que o Gabriel comentou, pense melhor na estrutura da tabela. O ideal seria usar IDs, nào strings nesse relacionamento. Leia sobre Formas Normais Compartilhar este post Link para o post Compartilhar em outros sites
guihh25 0 Denunciar post Postado Abril 8, 2016 Antes de tratar da solução, qual a finalidade? Qual o motivo do mapeamento possuir uma coluna com dois campos usuários? Pergunto isso pois talvez a solução esteja no mapeamento e não na consulta. O sistema é o seguinte: é uma tabela ai quando um usuario manda um texto para outro usuario ficaria id1 / id 2 / texto id_usuario_enviou / id_usuario_recebeu / texto porém o que recebeu pode mandar texto também para esse usuário ai ficaria o inverso Compartilhar este post Link para o post Compartilhar em outros sites
guihh25 0 Denunciar post Postado Abril 8, 2016 Não entendi o que você quis dizer com João = Maria e Maria = João... Mas olhando o resultado esperado, entendo que a consulta deveria apenas verificar se userid1 é igual a Maria ou userid2 é igual a Maria SELECT campos FROM tabela WHERE userid1 = 'Maria' OR userid2 = 'Maria'; Complementando o que o Gabriel comentou, pense melhor na estrutura da tabela. O ideal seria usar IDs, nào strings nesse relacionamento. Leia sobre Formas Normais Ok vamos la. vou tentar explicar melhor. Eu tenho a tabela userid1 / userid2 / texto Considerando as seguintes entradas: userid1 / userid2 / texto 1 2 teste 2 1 teste1 3 1 teste2 3 2 teste3 4 5 teste4 eu quero fazer um SELECT para onde contenha o id = 1 e o retorno dessa tabela para a funcao mysqli_num_rows seja = 2. Ou seja, ele vai agrupar os dois primeiros resultados. O agrupamento seria devido ao texto ser trocado entre as mesmas pessoas. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 8, 2016 Seria importante possuir a coluna de data de envio, para ordenar conforme o envio. Entretanto, eu utilizaria um from contendo um sub-select. Esse sub-select seria o union de ambas as consultas, remetente/destinatário. Digamos que a conversa seja entre usuário 1 e usuário 2. Mas quem está visualizando é o usuário 1 (sim, o ponto de vista, de quem está lendo, é importante). Logo: SELECT * FROM ( SELECT userid1 as remetente , descricao , dataenvio FROM tabela WHERE userid1 = 1 AND userid2 = 2 UNION SELECT userid1 as remetente , descricao , dataenvio FROM tabela WHERE userid1 = 2 AND userid2 = 1 ) ORDER BY dataenvio ASC Essa seria a consulta mais básica obter as mensagens, quem enviou e quando, além de estarem ordenados. A ordenação é importante, pois o UNION irá retornar primeiro a consulta 1 e depois a 2. Eu não retorno o user2, pois será sempre o contrário do user1, o que seriam mais dados para a consulta. Depois, estude o plano de execução e veja questões de performance. Compartilhar este post Link para o post Compartilhar em outros sites
guihh25 0 Denunciar post Postado Abril 10, 2016 Seria importante possuir a coluna de data de envio, para ordenar conforme o envio. Entretanto, eu utilizaria um from contendo um sub-select. Esse sub-select seria o union de ambas as consultas, remetente/destinatário. Digamos que a conversa seja entre usuário 1 e usuário 2. Mas quem está visualizando é o usuário 1 (sim, o ponto de vista, de quem está lendo, é importante). Logo: SELECT * FROM ( SELECT userid1 as remetente , descricao , dataenvio FROM tabela WHERE userid1 = 1 AND userid2 = 2 UNION SELECT userid1 as remetente , descricao , dataenvio FROM tabela WHERE userid1 = 2 AND userid2 = 1 ) ORDER BY dataenvio ASC Essa seria a consulta mais básica obter as mensagens, quem enviou e quando, além de estarem ordenados. A ordenação é importante, pois o UNION irá retornar primeiro a consulta 1 e depois a 2. Eu não retorno o user2, pois será sempre o contrário do user1, o que seriam mais dados para a consulta. Depois, estude o plano de execução e veja questões de performance. Obrigado aos que tentaram ajudar. Consegui resolver apenas colocando um GROUP BY userid1,userid2 e fazendo com que não fosse possível ter o mesmo userid em posições diferente com um outro id. Compartilhar este post Link para o post Compartilhar em outros sites