Array
(
)

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

PHP
Cleyton Caetano
   - 18 set 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..
#Código

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

esse é a linha do meu código.
#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 :(
#Código
$posts = DBRead('posts', "WHERE status = 1 ORDER BY id rand() LIMIT 5");


Esse é o erro que aparece no meu navegador.
#Código
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

Din
|
MVP
Pontos: 45
    18 set 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.

Cleyton Caetano
   - 19 set 2014


Citação:
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?

William (devwilliam)
   - 19 set 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()!

Cleyton Caetano
   - 19 set 2014


Citação:
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
#Código

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


meu erro!
#Código
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

William (devwilliam)
   - 19 set 2014

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

#Código

$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().

Cleyton Caetano
   - 20 set 2014


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

#Código

$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

Din
|
MVP
Pontos: 45
    23 set 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

Cleyton Caetano
   - 24 set 2014


Citação:
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!

#Código

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