ORDER BY não se comparta como esperado, método RAND

PHP

18/09/2014

Bom amigos do Devmidia, estou tentando criar um gadget para meu site que fique na lateral e o objetivo dele é exibir posts aleatórios encontrados no banco dados, até que o gadget está ok e exibindo os posts normalmente como ORDER BY DESC mas eu quero que seja aleatório!

creio eu que a formação do código seria mais ou menos essa..

SELECT id FROM posts ORDER BY rand() LIMIT 5;


esse é a linha do meu código.

$posts = DBRead('posts', "WHERE status = 1 ORDER BY id DESC LIMIT 5");


e está funcionando perfeitamente.

acho que assim deveria funcionar naomalmente trazendo posts aleatórios mas nada até o momento da erro :(
$posts = DBRead('posts', "WHERE status = 1 ORDER BY id rand() LIMIT 5");



Esse é o erro que aparece no meu navegador.

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'RAND() LIMIT 6' at line 1
Cleyton Caetano

Cleyton Caetano

Curtidas 0

Respostas

Claudio Lopes

Claudio Lopes

18/09/2014

talvez uma ideia para trazer dados seria vc usar o rand no php, indicando o min e max. Assim vc coloca um in pelo id da sua tabela do banco.
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

18/09/2014

talvez uma ideia para trazer dados seria vc usar o rand no php, indicando o min e max. Assim vc coloca um in pelo id da sua tabela do banco.


não entendi, tem como usar o RAND fora do comando sql?
GOSTEI 0
William

William

18/09/2014

Cleyton a ideia do sorteio (aleatório) é essa mesmo, não existe ordenação dessa maneira que você quer usando a função RAND()!
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

18/09/2014

Cleyton a ideia do sorteio (aleatório) é essa mesmo, não existe ordenação dessa maneira que você quer usando a função RAND()!

Justamente, até onde eu vejo está tudo certo, quando uso DESC funciona normalmente mas quando uso o RAND() não funciona da erro!

meu código
$posts = DBRead('posts', "WHERE status = 1 ORDER BY id DESC LIMIT 5");


meu erro!
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'RAND() LIMIT 6' at line 1
GOSTEI 0
William

William

18/09/2014

Volto a repetir, não tem sentido em você ordenar os registros aleatórios de um sorteio quer seja em ASC ou DESC!

$posts = DBRead('posts', "WHERE status = 1 ORDER BY id rand() LIMIT 5");


O erro que está dando não é por causa do RAND() e sim por causa do campo 'id' depois de ORDER BY, porque você está usando o RAND().
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

18/09/2014

Volto a repetir, não tem sentido em você ordenar os registros aleatórios de um sorteio quer seja em ASC ou DESC!

$posts = DBRead('posts', "WHERE status = 1 ORDER BY id rand() LIMIT 5");


O erro que está dando não é por causa do RAND() e sim por causa do campo 'id' depois de ORDER BY, porque você está usando o RAND().


entendi, o problema é que eu estava definindo o id para ordenar os registros, tirei o id e está funcionando perfeitamente agora, obrigada mesmo :D
GOSTEI 0
Claudio Lopes

Claudio Lopes

18/09/2014

asim cara:

$id1 = rand(1,10);
$id2 = rand(11,20);
$id3 = rand(21,30);

use as variaveis na query

$posts = DBRead('posts', "WHERE status = 1 and id in ($id1,$id2,$id3) ORDER BY id DESC LIMIT 5");

ai você concatena da forma que funciona ai.. so te dei a ideia.....


o rand possui um valor min e max.. vocÊ pode retornar isso do banco e passar como parametro
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

18/09/2014

asim cara:

$id1 = rand(1,10);
$id2 = rand(11,20);
$id3 = rand(21,30);

use as variaveis na query

$posts = DBRead('posts', "WHERE status = 1 and id in ($id1,$id2,$id3) ORDER BY id DESC LIMIT 5");

ai você concatena da forma que funciona ai.. so te dei a ideia.....


o rand possui um valor min e max.. vocÊ pode retornar isso do banco e passar como parametro


Legal, mas a seleção que quero fazer é super aleatória mesmo!

só o rand() resolveu meu problema!

$posts = DBRead('posts', "WHERE status = 1 ORDER BY rand() LIMIT 5");
GOSTEI 0
POSTAR