Gui Siani 0 Denunciar post Postado Novembro 14, 2014 A seguinte query retorna TODOS os match_id da tabela match que forem do dia 2014-11-14, mas o que eu preciso é que retorna todos os match_id em que o profile_id da tabela score estiver contido em profile_ids da tabela match e, que o score_id da tabela score fosse igual score_id da tabela score_player e o profile_id da tabela score_player fosse igual ao especificado na query (80675309). Não consigo identificar o erro. A lógica parece estar perfeita. Segue query: SELECT DISTINCT m.match_id FROM `match` AS m INNER JOIN `score` AS s ON m.profile_ids LIKE CONCAT('%',s.profile_id,'%') INNER JOIN score_player AS sp ON s.score_id = sp.score_id WHERE sp.profile_id = 8067530 AND m.match_date = '2014-11-14' Na tabela match, a coluna profile_ids possui dois profile_id "1234;4321" separado por ponto e virgula Desde já, obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 14, 2014 ... estiver contido em ... Não seria o caso de um subslect do tipo In ? m.profile_ids in (select s.profile_id from socre s where ...) Compartilhar este post Link para o post Compartilhar em outros sites
Gui Siani 0 Denunciar post Postado Novembro 14, 2014 Boa, Motta.. Eu não sabia do subselect ! Eu estou executando a query abaixo, mas ele retorna TODOS os match_id da data especificada em match_date ... Não filtra só os dados coletados no IN. Se eu executar só a subquery, ele retorna todos os profile_id certinho SELECT match_id FROM `match` WHERE profile_ids IN ( SELECT s.profile_id FROM `score` AS s INNER JOIN score_player AS sp ON s.score_id = sp.score_id WHERE sp.profile_id = 806753099388913 AND s.score_date = '2014-11-14') AND match_date = '2014-11-14' Estou achando que a cláusula IN está errada ai. Embora para encontrar a partir de um Array, tem que ser IN, né? por exemplo: (123,432,534,765) LIKE m.profile_ids. Pegar todos os match_id de onde encontrar esses IDs de m.profile_ids. Compartilhar este post Link para o post Compartilhar em outros sites
Gui Siani 0 Denunciar post Postado Novembro 14, 2014 Encontrei o problema! Embora eu ainda não sei como resolver...A query que postei acima está correta, porém, como os profile_id estão separados por virgula na tabela match, coluna profile_ids, ele só encontra o match_id desde que o profile_id esteja antes do ponto e vírgula ";", se estiver depois, ele não acha! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 14, 2014 match.profile_ids liga com score.profile_id ?! SELECT match_id , profile_ids FROM `match` WHERE profile_ids IN (SELECT s.profile_id FROM `score` AS s INNER JOIN score_player AS sp ON s.score_id = sp.score_id WHERE sp.profile_id = 806753099388913 AND s.score_date = '2014-11-14') AND match_date = '2014-11-14' seria isto mesmo (mas não conheço o modelo) Compartilhar este post Link para o post Compartilhar em outros sites
Gui Siani 0 Denunciar post Postado Novembro 14, 2014 RESOLVIDO! Encontrei uma solução com esta dica aqui: SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; Primeiro eu seleciono todos os profile_id de score ligado com score_player: SELECT s.profile_id FROM `score` AS s INNER JOIN score_player AS sp ON s.score_id = sp.score_id WHERE sp.profile_id = 806753099388913 AND s.score_date = '2014-11-14' A partir destes profile_id, eu gero um array e mesclo os dados com barra "|" (implode('|', array)). Feito isso, eu pesquiso na tabela match, os profile_id que se assemelham aos da coluna profile_ids com esta query aqui: SELECT m.match_id FROM `match` AS m WHERE m.profile_ids REGEXP 'profile_ids_mesclados' AND match_date = '2014-11-14' Obrigado ae, pessoal! Compartilhar este post Link para o post Compartilhar em outros sites