requête sql ( sélection aléatoire )

Répondre
N@b
le 08/08/2008 à 19:33
N@b
Bonjour ...

Je dispose d'une table avec le shémat suivant :
CREATE TABLE news (
id_news integer auto_increment not null,
titre_news varchar (50) not null,
news longtext not null,
primary key (id_news)
)type=myisam;


La table contient par exemple 15 enregistrements ( donc 15 lignes selon mysql_fetch_array() et mysql_num_rows() ) et je souhaiterai afficher les 5 dernières lignes ajoutés mais dans un ordre aléatoire avec une requete sql.

j'ai essayé avec celle-ci :

SELECT * FROM news ORDER BY id_news DESC LIMIT 5, RAND()


mais je présume bien que c'est une erreur de syntaxe de ma requete lorsque je la lance avec PHP.

Comment alors faire pour retirer les 5 dernières lignes de ma table et les afficher aléatoirement sur mon résultat HTML ?

Merci pour votre aide ...
Keika
le 09/08/2008 à 02:23
Keika
je pense utiliser rand(), mais la fonction PHP.

Je la mettrais dans la boucle d'affichage CEPENDANT, rand peut resortir les meme nombres a la suite, ca lui fait pas peur, donc je suggere la creation d'une SESSION qui stock les nombres donnes par rand et qui les compare avec le nouveau, s'il n'est pas dans la SESSION on l'y ajoute et laisse le script s'effectuer, s'il y est, on recharge le rand jusqu'a ce qu'il sorte le bon nombre...
Mais ca me parait un peu degueu comme technique...
Le PHP --> C'est dur !
Sammuel
le 09/08/2008 à 14:24
Sammuel
Je ne sais pas si ca va fonctionner, mais comme cela, ça donne quoi :

SELECT * FROM news
ORDER BY RAND() DESC
LIMIT 5


smiley
N@b
le 09/08/2008 à 23:56
N@b
non, ça affiche une sélection aléatoire avec une limite de 5 id maximum. mais pas les 5 derniers enregistrements ...
LupusMic
le 10/08/2008 à 20:09
LupusMic
(Keika) Non, le order est fait avant la clause limit. En conséquence, le tri se fait sur l'ensemble des tuples sélectionnés.

Ce que veut faire (Michael_Lee) n'est pas possible directement.

Au pire, et si on a pas peur de faire des trucs ignobles :

<?php
select * from
( select * from news
order by id asc
limit 5
) order by rand() ;
?>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours