Ir para conteúdo

POWERED BY:

Arquivado

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

alvarogtc

[Resolvido] Consulta sql - RAND() & NOME

Recommended Posts

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

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

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

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

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

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

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

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

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?

 

Imagem Postada

 

 

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

@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

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

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

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

×

Informação importante

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