alvarogtc 1 Denunciar post Postado Setembro 29, 2010 pessoal to tentando fazer uma consulta no banco mas de todas as maneiras q tentei nao cosigo tenho a tabela categorias..(id, nome, status) tenho 100 registros... queira pegar 30 by RAND() e depois esses 30 ordenar pelo nome alfabeticamente tentei assim sql ='Select * from categorias where status=1 ORDER BY RAND(), nome ASC LIMIT 30'; // nao deu // tentei sql = 'Select categorias.* from categorias where categorias.status=1 ORDER BY RAND(), categorias.nome ASC LIMIT 30';// tbm nao tentei de outras maneira tbm, mas so retorna os 30 itens aleatoriamente, nao ordena por nome. nada de sugestões??? continuo tentando/// sem sugestões? Compartilhar este post Link para o post Compartilhar em outros sites
Foreach 0 Denunciar post Postado Setembro 30, 2010 Não tem lógica pegar resultados randomicos se vai ordenar depois, mais de qualquer forma tem uma função chamada sort(); que ordena ARRAYS e rsort(); tambem, use elas vai resolver. se tiver duvidas posta ae que eu mando um exemplo inté ;D Compartilhar este post Link para o post Compartilhar em outros sites
alvarogtc 1 Denunciar post Postado Setembro 30, 2010 A questao de pegar resultados randomicos e depois ordenar é pq: tenho 100 categorias cadastradas. porem para nao estourar o layout o maximo q posso colocar seria 30 se eu coloco odernacao alfabetica vai ate a letra F se pego by RAND fica tudo desordenado. entao eu queria pegar 30 aleatoriamente e esses 30 ordena-los de forma alfabetica, so para ficar algo mais organizado. vou verificar sobre sort() e rsort() Compartilhar este post Link para o post Compartilhar em outros sites
Carlos Braga (c) 0 Denunciar post Postado Setembro 30, 2010 Da sim, faz desta forma sql ='Select * from categorias where status=1 ORDER BY RAND() AND nome ASC LIMIT 30'; é só trocar a (,) virgula pelo (AND) Abs! Compartilhar este post Link para o post Compartilhar em outros sites
alvarogtc 1 Denunciar post Postado Outubro 1, 2010 tentei aqui ORDER BY RAND() AND nome ASC LIMIT 30 traz os resultado randomicamente como se nao tivesse esse AND nome ASC... outra ideia. Compartilhar este post Link para o post Compartilhar em outros sites
Sil.Miranda 0 Denunciar post Postado Outubro 1, 2010 tentei aqui ORDER BY RAND() AND nome ASC LIMIT 30 traz os resultado randomicamente como se nao tivesse esse AND nome ASC... outra ideia. ORDER BY nome ASC,RAND() AND LIMIT 30 só inverter a ordem , por o nome primeiro , randomicamente depois simples ;] Compartilhar este post Link para o post Compartilhar em outros sites
alvarogtc 1 Denunciar post Postado Outubro 1, 2010 tbm nao funciona nesse caso proposto por você ORDER BY nome ASC,RAND() AND LIMIT 30 // ja nao funcionaria devido ao AND antes do limit // na sua logica vai ordernar por nome nao funciona ORDER BY nome ASC,RAND() LIMIT 30 // a consulta vai chamar 30 resultados ordenados por nome, nesse caso vai pegar de 1 a 30, pode tentar ai pra ver. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Outubro 1, 2010 Cara, diretamente pelo SQL acredito que não seja possível. a sugestão do sort() ou rsort(), é que você grave o retorno da consulta com RAND() num array. ordene o array, e depois com outro loop, mostre os dados. Simples, e funciona. Compartilhar este post Link para o post Compartilhar em outros sites
Sil.Miranda 0 Denunciar post Postado Outubro 1, 2010 Se o que eu te disse não funcionou eu devo estar completamente maluco então. Eu tenho um banco , rodei a query " SELECT * FROM `island` ORDER BY IslandName ASC , RAND( ) LIMIT 0 , 30 "; O que eu tive de resultado? Voce não deve ter chave primaria na sua tabela , nem indices , ae só sendo magico para ordenar essa tabela. (Além de ser um PESSIMO método de criar uma tabela) Todas as tabelas devem ter uma chave primaria, se voce usa SELECT voce deve especificar no banco quais indices voce utiliza para a clausula WHERE , além de melhorar a performance , voce melhora o sistema de busca. Utilize a API MySQLi, defina os alertas do php e mysql como maximo , com isso voce vai conseguir criar código de qualidade e que funcione legal. []'s Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Outubro 1, 2010 @Sil.Miranda o problema é que não há nada de aleatório nisso. execute de novo, e de novo, e de novo... e verá que o resultado é sempre o mesmo.. se você tiver 30 registros, e der um LIMIT 5 esperava-se que o retorno fossem 5 registros aleatórios dentro desses 30, porém organizados em ordem pelo 'nome'. se rodar qq coisa, junto com RAND(), o RAND() não funciona, e você só terá o retorno ordenado... mas nunca aleatório. Compartilhar este post Link para o post Compartilhar em outros sites
alvarogtc 1 Denunciar post Postado Outubro 1, 2010 pessoal eu tenho id, nome, status onde ID é a chave primaria ate onde eu pesquisei, eu teria q fazer algo assim " select * from `categorias` where status=1 ORDER BY RAND() LIMIT 30 " depois pegar esse 30 resultados randomincamente e aplicar o SORT (pelo NOME ASC) so nao to conseguindo fazer isso funcionar. se alguem tiver a logica do funcionamento. Compartilhar este post Link para o post Compartilhar em outros sites
Sil.Miranda 0 Denunciar post Postado Outubro 1, 2010 Foi falha minha :P desculpa ae eu nem prestei atenção no que tava fazendo.. Compartilhar este post Link para o post Compartilhar em outros sites
Carlos Braga (c) 0 Denunciar post Postado Outubro 2, 2010 Direto do MySql dá sim, se tem logica eu nao sei rsss, mas funcionou deveria ser +/- isso? 1) Selecionar todos os resultados da tabela xxx 2) Sortear e limitar resultados 3) ordenar por nome 4) limitar a xxxx results SELECT * FROM ( SELECT * FROM pessoa ORDER BY rand( ) LIMIT 10 )pessoa ORDER BY nome ASC LIMIT 10 >> com WHERE SELECT * FROM ( SELECT * FROM pessoa ORDER BY rand( ) LIMIT 10 )pessoa WHERE status=1 ORDER BY nome ASC LIMIT 10 Voce deve usar o limit tambem dentro da SubQuery caso contrario nao da efeito.Aqui funcinou, tstei com 3,5, 10, 30 no LIMIT Tabela Pessoa, linhas: id e nome Espero que ajude, Abs Compartilhar este post Link para o post Compartilhar em outros sites
alvarogtc 1 Denunciar post Postado Outubro 2, 2010 Valew Carlos funcionou sim pegou 30 resultados randomicamente e ordenou de forma alfabetica sem nenhum tipo de erro... obrigada... Compartilhar este post Link para o post Compartilhar em outros sites