Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

Faelzindc

GROUP BY com ORDER BY

Recommended Posts

Estou usando:

""SELECT player, playerid, xp, date, date2, voc, level, country FROM xprecords WHERE `world` = '$world' GROUP BY player ORDER BY `xp` DESC LIMIT 50""
... o GROUP BY funciona perfeitamente sem deixar que a coluna "player" se repita, mas com um GRANDE problema, o ORDER BY `xp` DESC não adianta de nada, o que o code faz é pegar os primeiros "player" da tabela e não os primeiros "player" com 'xp' maior.

O que preciso fazer?

 

Obrigado desde já! Abraço!

Share this post


Link to post
Share on other sites

GROUP BY com ORDER BY é realmente um problema.

eu faço dessa forma (com um sub-select)

 

SELECT (
	SELECT player, playerid, xp, date, date2, voc, level, country 
	FROM xprecords 
	WHERE world = '$world' 
	GROUP BY player 
)
ORDER BY xp DESC 
LIMIT 50

A idéia é gerar uma sub-tabela de resultados (não repetidos) e depois seleciona tudo dela e aí sim dá um ORDER BY.. agora os detalhes é com você..

valew.. ;)

Share this post


Link to post
Share on other sites

GROUP BY com ORDER BY é realmente um problema.

eu faço dessa forma (com um sub-select)

 

SELECT (
	SELECT player, playerid, xp, date, date2, voc, level, country 
	FROM xprecords 
	WHERE world = '$world' 
	GROUP BY player 
)
ORDER BY xp DESC 
LIMIT 50

A idéia é gerar uma sub-tabela de resultados (não repetidos) e depois seleciona tudo dela e aí sim dá um ORDER BY.. agora os detalhes é com você..

valew.. ;)

 

Entendi amigo, nunca tinha mexido com subquery, agora esse code aí esta dando um erro:

Operand should contain 1 column(s)

Share this post


Link to post
Share on other sites

Eita.. foi mau.. faltou um pedaço aí.

aqui tem um exemplo mais completo..

 

crie uma tabela como a que está abaixo.. e utilize os INSERTS..

 

CREATE TABLE IF NOT EXISTS `tb_cliente` (
  `id_cliente` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) NOT NULL,
  `codigo_area` int(11) NOT NULL,
  `telefone` varchar(255) NOT NULL,
  PRIMARY KEY (`id_cliente`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Extraindo dados da tabela `tb_cliente`
--

INSERT INTO `tb_cliente` (`id_cliente`, `nome`, `codigo_area`, `telefone`) VALUES
(1, 'João da Silva', 11, '3333-5555'),
(2, 'Maria', 11, '6666-5555'),
(3, 'Maiko', 13, '5555-7777'),
(4, 'Josiane', 43, '5555-9999'),
(5, 'Mario Antônio', 13, '2323-6586'),
(6, 'Carol silva', 22, '1354-6848');

Qual é a idéia aqui..

 

Quero selecionar clientes ordenado pelo "id_cliente" de forma decrecente. Sem repetição de

DDD's (código de área de telefonia).

 

Eu dou um SELECT e isso cria minha tabela "conteudo". Sobre esta tabela gerada.. dou outro

SELECT utilizando GROUP BY no "codigo_area" .

 

E este é o dito cujo:

SELECT * FROM (
SELECT * 
FROM tb_cliente 
ORDER BY id_cliente DESC
) AS conteudo
GROUP BY codigo_area
LIMIT 4

mas lembre-se de que SUB-SELECT sempre baixa um pouco o desempenho. Então.. use com moderação

 

hehe.. beleza.

valew.

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.