0

Somar a partir de determinada posição na consulta

criado por Webster Moitinho em 14/04/2011 2:42pm
Olá a todos do PHP Brasil!

Estou tentando fazer uma tabela estatística dos estado do Brasil. Mas como são 27, fica ruim pra por no gráfico (com o perdão da cacofonia rsrs).

Então, o que eu fiz:

SELECT uf, estado, concess
FROM `estados`
ORDER BY concess DESC
LIMIT 1 , 7


Até aí beleza, só que ou outros 20 estados, eu queria somar para que aparecessem em OUTROS pra ficar bem bonitinho no gráfico.

Aí estive pensando em usar

SELECT Sum(estados.concess) AS qt
FROM estados
LIMIT 7 , 27

Mas dá retornando vazio

Agora deu um branco e eu não consigo sair do lugar. Agradeço a todos.

Lista de Respostas:

+1
Resposta Final (Undo)
09/05/2011 4:41pm
(~13 anos atrás)
Jayme A. C. Gimenez respondeu:
Minha sugestão leva em conta que o ranking varia. Isso não teria problema para o que eu propus. Desde que seja para apresentar, no exemplo que vc deu, um dia de cada vez.

Exemplo: eu entro no site e quero ver a estatística de hoje. Clico no link. A primeria query ordenará os estados e pegará os 7 primeiros (o que inclui pegar os ids desses sete primeiros, certo?). A segunda query fará um select sum dos demais estados (ela usará os ids, conhecidos porque serão trazidos pelo resultado da primeira query, para excluir dessa soma os 7 primeiros). Feito tudo isso, ela me mostra os sete primeiros do ranking e a soma dos outros estados.

Veja que tudo foi feito dinamicamente. Na hora, com base, exclusivamente, no que já está no bd.

Aí, daqui uma semana, eu entro de novo no site. E, nesse período, o bd foi atualizado e o ranking dos estados mudou. Não muda nada para as queries.

A primeira saberá quem são os 7 primeiros do ranking e os ids deles. A segunda, baseada nesses ids, somará os demais. E me mostrará a tabela atualizada. Dá certo porque a tabela, na tela, é sempre montada dinamicamente.

0
14/04/2011 4:04pm
(~13 anos atrás)
Jayme A. C. Gimenez respondeu:
Parece tudo certinho (talvez somente o segundo LIMIT tenha que ser 8 , 27 - será que não?

Talvez algum erro na hora de resgatar o resultado da segunda query.

Sugiro que vc coloque essa questão no phorum de iniciantes aqui do PHPBrasil. Lá, fica mais fácil de responder questões básicas (a FAQ, em princípio, seria para questões mais gerais, mais no atacado que no varejo)

0
14/04/2011 4:31pm
(~13 anos atrás)
Jayme A. C. Gimenez respondeu:
Ah, talvez seja esse LIMIT da segunda query que não faça sentido (será que ele não faria sentido somente quando usamos o ORDER?).

Vc teria que usar algum tipo de WHERE para selecionar somente os estados que quer somar (ao invés de usar o LIMIT). Por exemplo, feita a primeira query você terá os 7 estados que pretende deixar fora da soma da segunda query. Assim, vc usaria essa informação para fazer o WHERE (WHERE estado <> 'x' AND estado <> 'y' etc).

0
17/04/2011 4:05pm
(~13 anos atrás)
Limit não funciona com SUM

0
17/04/2011 4:07pm
(~13 anos atrás)
Webster Moitinho, concess está o total correto??
Não seria um caminho trazer os 27 e faser um list de até 7 em ela e 8 a 27 fazer a soma?
Porque não fezer na programação?

0
19/04/2011 10:54am
(~13 anos atrás)
Webster Moitinho respondeu:
Carlos Henrique, obrigado pela resposta. Concordo com você, mas não sei como fazer do 8 ao 27, uma vez que o ranking de estados pode mudar na atualização do DB

0
21/04/2011 9:35pm
(~13 anos atrás)
Jayme A. C. Gimenez respondeu:
Então, Moitinho, foi por isso que fiz aquela sugestão ali em cima.

Já que vc vai, mesmo, fazer duas queries, a primeira definirá os sete primeiros estados. Vc, então, terá os ids desses 7 estados.

Na segunda query, vc faz um select sum, mas, no WHERE, exclui aqueles primeiros sete estados. Dessa forma, a soma dessa segunda query envolverá somente os estados que ainda não estejam na primeira query. Entendeu a ideia? Isso é simples de ser feito. Se não conseguir de prima, posta lá no phorum que vamos ajudando vc a finalizar o código.

0
09/05/2011 1:12pm
(~13 anos atrás)
Webster Moitinho respondeu:
Jayme, obrigado pela dica,

Mas é que a ordem varia conforme o ranking do estado. Por exemplo:

Segunda-feira
1º SP
2º MG
3º RS
etc


Terça-feira
1º SP
2º RJ
3º MG
etc.

Já tentei postar minhas dúvidas no forum, mas fica muito difícil de encontrar a resposta depois, mas vou postar o tópico lá...


Obrigado

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)