Faelzindc 0 Report post Posted November 5, 2010 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
rodrigo I.O 0 Report post Posted November 6, 2010 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
Faelzindc 0 Report post Posted November 6, 2010 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
rodrigo I.O 0 Report post Posted November 6, 2010 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