Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hugo_andrade

Otimização de consulta

Recommended Posts

Boa Noite,

 

Bom atualmente realizo uma consulta em vários passos, porem gostaria de pedir a opinião de vocês se seria possível realizar essa consulta com apenas uma query.

 

Tenho uma tabela, que armazenas os votos de varias pessoas, ex:

 

Person_id * Answer_id

117 * 12

256 * 13

243 * 12

235 * 14

245 * 14

564 * 12

 

E gostaria de recuperar os dados ordenados de acordo com a frequencia das respostas (Answer_id), ordenando do de menor frequência para o de maior frequência. Ex.:

 

Person_id * Answer_id

256 * 13

235 * 14

245 * 14

117 * 12

243 * 12

564 * 12

 

Atualmente estou utilizando mais de uma consulta pra conseguir esse resultado, conseguiria com apenas uma consulta obter esse resultado?

 

vlws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai ter que ordenar seus Dados, por exemplo ordem decrescente. Abaixo vou citar alguns Links, que pode lhe ajudar com isso:

http://forum.imasters.com.br/topic/403406-resolvidoordenar-dados-em-ordem-crescente-ou-decrescente/

http://www.ehow.com.br/ordenar-resultado-mysql-usando-order-by-como_4027/

 

Ou então assim:

$sql = mysql_query("SELECT * FROM nome_tabela ORDER BY DESC"); // Seleciona a Tabela e busca todos os dados Decrescente (Maior por Menor)

Espero ter Ajudado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um select contando os answerid usando group by, faça deste select uma tabela virtual e faça um join com a tabela base ligando o answerid , ao final ordene pelo count da virtual.

Estou num tablet, se for o caso monto a sql depois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai ter que ordenar seus Dados, por exemplo ordem decrescente. Abaixo vou citar alguns Links, que pode lhe ajudar com isso:

http://forum.imasters.com.br/topic/403406-resolvidoordenar-dados-em-ordem-crescente-ou-decrescente/

http://www.ehow.com.br/ordenar-resultado-mysql-usando-order-by-como_4027/

 

Ou então assim:

$sql = mysql_query("SELECT * FROM nome_tabela ORDER BY DESC"); // Seleciona a Tabela e busca todos os dados Decrescente (Maior por Menor)

Espero ter Ajudado!!

 

jgustavo99, creio que não compreendeu minha duvida. Utilizando o ORDER BY como descrito, vou obter somente a ordenação dos meus dados, e neste caso primeiro pretendo descobrir a frequência de "Peson_id"s de acordo com os "Answer_id"s para depois ordenar esses registros, dos que possuem menor frequência de incidência para os que possuem maior. Mais mesmo assim, vlw ae ;)

 

 

Faça um select contando os answerid usando group by, faça deste select uma tabela virtual e faça um join com a tabela base ligando o answerid , ao final ordene pelo count da virtual.

Estou num tablet, se for o caso monto a sql depois.

 

Motta, entendi não intendendo kk vou dar uma pesquisada aqui sobre esse método que você descreveu, não tenho tanto conhecimento assim de SQL ainda. Vlw ai pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

--CONTANDO

SELECT Answer_id , COUNT(*) QTD
FROM TABELA T2
GROUP BY Answer_id

--UNINDO

SELECT T.Person_id  , T.Answer_id ,VIRTUAL.QTD
FROM TABELA T,
           (SELECT Answer_id , COUNT(*) QTD
            FROM TABELA T2
            GROUP BY Answer_id) VIRTUAL
WHERE VIRTUAL.Answer_id = T.Answer_id
ORDER BY VIRTUAL.QTD DESC,T.Person_id

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

--CONTANDO

SELECT Answer_id , COUNT(*) QTD
FROM TABELA T2
GROUP BY Answer_id

--UNINDO

SELECT T.Person_id  , T.Answer_id ,VIRTUAL.QTD
FROM TABELA T,
           (SELECT Answer_id , COUNT(*) QTD
            FROM TABELA T2
            GROUP BY Answer_id) VIRTUAL
WHERE VIRTUAL.Answer_id = T.Answer_id
ORDER BY VIRTUAL.QTD DESC,T.Person_id

 

Funcionou perfeitamente aqui Motta! Obrigado mesmo pela força!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.