Amilt 0 Denunciar post Postado Novembro 14, 2010 Boa tarde a todos. Gostaria que alguem me desse uma luz. Tenho um sistema rodando em php com mysql onde tenho uma tabela que seria onde eu amazeno historicos de um equipamento. exemplo: 'codigo','nome do equipamento','ocorrencia','data' esse registros pode se repetir varias vezes, mudando é claro o codigo que está como auto_increment posso ter por exemplo: 1,televisaox,manutencao,'01-11-2010' 2,televisaoy,ok,'01-11-2010' 3,televisaox,reprovado,'10-11-2010' Nesse exemplo reparem que a mesma televisaox pode ter varias ocorrencias, assim como varios outro equipamentos. Minha duvida é a seguinte, preciso retornar uma select, que me retornaria somente os equipamentos que tivessem determinados historicos. A dificuldade seria assim: Preciso consultar qual equipamento que sofreu 'manutencao' E ficou 'reprovado' De acordo com o exemplo assim pela logica, preciso somente ter na tela a televisaox Alguem entendeu ? rs Ou me daria o caminho das pedras de como posso fazer isso ? Hoje atualmente no programa eu trato um historico por vez, então eu posso listar todos que sofreram manutençao, mas na tela me retornaram todos independente de estarem reprovado ou ok, na tela onde me retornou tudo, eu tenho link para me mostrar o historico especificamente do equipamento que eu quero. E o que eu quero é evitar isso, se eu poder melhorar essa consulta eu nao preciso exibir tudo na tela e sim somente o desejado, como citei acima listar os que sofreram manutençao e ficaram reprovado. Aguardo a lanterna de alguem Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 14, 2010 Veja se isto ajuda. Veja o #12 Compartilhar este post Link para o post Compartilhar em outros sites
srnetcave 1 Denunciar post Postado Novembro 15, 2010 Pode fazer um inner join na propria tabela, por exemplo sua tabela id ecode // codigo do equipamento status date 1, 10250, 1, 2010-11-15 13:12:54 2, 45202152, 1, 2010-11-15 13:12:54 3, 10250, 2, 2010-11-15 13:12:54 4, 2154221, 1, 2010-11-15 13:12:54 5, 45202152, 2, 2010-11-15 13:12:54 status 1 = manutencao status 2 = reprovado SELECT m.* FROM table m INNER JOIN table n ON m.ecode = n.ecode WHERE m.status = 1 AND n.status = 2 Compartilhar este post Link para o post Compartilhar em outros sites
Amilt 0 Denunciar post Postado Novembro 16, 2010 E ai pessoal, só para dar o feedback, sem sucesso algum. Nao entendi como fazer o ultimo exemplo posta ai. Para melhorar o exemplo do que quero que é exatamente o que Motta postou referente ao outro topico, criei até uma tabela exemplo para testar nela e tudo que eu vi testei nela e continuei sem sucesso, inclusice do topico que o Motta indicou, também não teve feedback. codigo|nome |tipo 1 |amilton |quadrado 2 |amilton |bola 3 |lixo |bola 4 |cesta |quadrado Preciso fazer uma select que me liste o nome de quem tenha como tipo ('bola' e 'quadrado') Como registro nao pode ser ao mesmo tempo bola and quadrado, ai que vem a dificuldade Tentei usar o exemplo com exists que consta no topico que o Motta indicou, mas listou também o nome que eu não queria. Nesse caso tem que me retornar o nome somente 'amilton' Então fica ai a duvida em aberto novamente Agradeço a atenção de todos e obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 16, 2010 Tente algo assim : SELECT * FROM TABELA T1 WHERE ocorrencia = 'manutencao' AND EXISTS (SELECT NULL FROM TABELA T2 WHERE T2.CODIGO = T1.CODIGO AND OCORRENCIA = 'reprovado') Compartilhar este post Link para o post Compartilhar em outros sites
Amilt 0 Denunciar post Postado Novembro 16, 2010 Boa noite, dando um feedback ao pessoal, especialmente ao usuario Motta. Funcionou certinho, poderiamos inclusive fazer de outra meneira também, só que é mais complicada que é uma select dentro da outra que também funcinou, mas o exemplo com EXISTS funcionou melhor Se baseando na tabela exemplo que postei acima e o script do Motta, ficaria assim a select para cumprir o proposto acima também descrito SELECT nome from teste t1 where tipo='quadrado' and exists (select nome from teste t2 where t1.nome = t2.nome and tipo='bola') Respostas acima falei que não havia conseguido com o exists, pois devia estar fazendo alguma coisa errada, mas com a ajuda do amigo Motta, obtive sucesso. Obrigado a todos Compartilhar este post Link para o post Compartilhar em outros sites