Requête SQL > SELECT

Répondre
N@b
le 05/07/2013 à 23:30
N@b
Bonsoir,

J'ai une table "produits" contenant divers produits avec un attribut "promotion" pour afficher les produits en promotion :

CREATE TABLE produits (
id_produit integer auto_increment not null,
titre varchar (50) not null,
prix_ht real not null,
promotion enum ("0","1") not null,
primary key (id_produit)
)type=myisam;


Je souhaiterai afficher les 5 derniers produits en promotion mais aléatoirement.

Je sais comment faire pour afficher les 5 derniers produits avec une requête SQL :

<?php
$produits_promotion=mysql_query("SELECT * FROM produits WHERE promotion='1' ORDER BY id_produit DESC LIMIT 5");
?>


Malheureusement, je ne sais pas quoi ajouter dans ma requête SQL pour les afficher aléatoirement.

Merci d'avance pour votre aide.

Cordialement
LupusMic
le 06/07/2013 à 01:39
LupusMic
Tu as plusieurs solutions possibles.

La première, c'est de faire un order by rand(). Ça marche, mais si ta table de produits est grande, ou bien que tu as de nombreuses requêtes faisant appel à cette fonctionnalité, de sérieux problèmes de performance peuvent survenir (création d'une table temporaire, et appels systèmes liés à l'aléatoire).

La seconde, c'est de ne pas récupérer tout le résultat lors de l'exécution de la requête. Tout d'abord, mysql_query ne doit plus être utilisé. Il faut utiliser l'extension mysqli ou pdo_mysql pour utiliser MySQL dans PHP.
Donc, tu peux utiliser mysqli::result_data_seek pour te balader dans le result set de ta requête, et donc prendre un offset au hasard.

On peut imaginer d'autres manières de faire, mais c'est déjà deux bonnes pistes.
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