Tacno 2 Denunciar post Postado Março 18, 2013 Olá!Estou fazendo uma query que mostra a postagem da matéria e estou utilizando o método .find() com dois inner joins.A query está assim: @post = Post.find(:first, :select => 'posts.imagem, posts.titulo, posts.texto, posts.tags, categoria.categoria, usuarios.usuario, usuarios.nome, usuarios.assinatura', :joins => 'INNER JOIN usuarios ON usuarios.usuarioid = posts.usuario INNER JOIN categoria ON categoria.categoriaid = posts.categoria', :conditions => 'posts.url LIKE "%' + param + '%"', :limit => '1' ) Estou selecionando os campos. O problema que estou tendo é:Na tabela postagem eu tenho o campo categoria, que está linkado com a tabela categoria atavés do categoriaid.Ou seja:posts.categoria = categoria.categoriaidFiz essa query, no select deixo claro que quero o categoria.categoria (que é o nome da categoria) e ele retorna 0 quando executo o código. <%= @post.categoria %> <!-- Retorna 0. --> Outra coisa. Como eu tenho valores duplicados nas tabelas. Ex: posts.categoria # Id da categoria categoria.categoria # nome da categoria Caso eu precisasse dos dois, como deveria agir? Como faço para printar os dois campos inseridos na query?? Desde já agradeço. Tacno Compartilhar este post Link para o post Compartilhar em outros sites
Tacno 2 Denunciar post Postado Março 19, 2013 Descobri algo. Se eu fizer apenas um INNER JOIN, funfa! Se eu colocar os dois, num funfa mais!! Como faço multiplos joins? Compartilhar este post Link para o post Compartilhar em outros sites
brunocampos_ 3 Denunciar post Postado Março 20, 2013 Opa, Primeira pergunta: você está utilizando Rails? Segunda: você pode postar como estão suas tabelas e models? Bom, supondo que esteja utilizando Rails... Pelo que vi, começando pela sua segunda pergunta, está mal modelado isto. Uma dica seria criar um migrate para modelar as tabelas da maneira convencional, utilizando o campo categoria_id como chave estrangeira na tabela post, e trocar categoria.categoria por categoria.nome. Já sobre sua pergunta, a maneira de recuperar o nome da categoria neste seu modelo seria @post.categoria.categoria Como você está recuperando apenas um post, seu select é um pouco desnecessário, se seus models estiverem associados, você poderia fazer: @post = Post.where("posts.url like '%#{param}%'") E quando chamar @post.categoria ou @post.usuario, o rails já faz a query necessária para recuperar estes dados. Como são querys básicas, buscando diretamente a chave primária, sua performance não irá sofrer danos e seu código ficará mais limpo. Outra coisa que pode fazer seria alterar sua query para algo como @post = Post.find(:first, :select => 'posts.imagem, posts.titulo, posts.texto, posts.tags, categoria.categoria as categoria_nome, usuarios.usuario, usuarios.nome, usuarios.assinatura', :joins => 'INNER JOIN usuarios ON usuarios.usuarioid = posts.usuario INNER JOIN categoria ON categoria.categoriaid = posts.categoria', :conditions => 'posts.url LIKE "%' + param + '%"', :limit => '1' ) E então recuperar a categoria como @post.categoria_nome Mas se estiver utilizando Rails, recomendo que utilize Rails, não apenas o framework, mas as convenções pois o framework é justamente em cima disto. "Convention over configuration". Compartilhar este post Link para o post Compartilhar em outros sites