10-12-2008, 05:20 PM
(Modification du message : 10-12-2008, 05:29 PM par Sephi-Chan.)
(10-12-2008, 05:08 PM)Karedas a écrit :(10-12-2008, 03:49 PM)Sephi-Chan a écrit :Voilà pourquoi je maintiens que — dans ce cas — la requête que je propose est meilleure.
- D'après le contexte qui nous est donné, il y a plusieurs personnages pour une ville, donc la table ville contiendra assez peu d'enregistrement.
- De plus, cette requête n'est appelée qu'à l'inscription, on peut donc se permettre d'utiliser une requête un peu gourmande pour conserver un code clair.
- Enfin, le script PHP proposé peut poser problème si les identifiants de villes ne se suivent pas. C'est donc plutôt lourd.
En effet dans le cas d'une mini table, c'est une requete idéale, je m'en sert souvent, mais je suis pas d'accord sur 2 points.
-On ne peut pas se permettre d'utiliser une requête un peu gourmande pour gagner en clareté du code. Du moins si on développe dans l'interêt de l'utilisateur. De plus garder un code clair est théoriquement possible en toute circonstance.
J'ai une base qui se prend 500 requêtes à la seconde en quasi permanence, crois moi, je fais la chasse aux requêtes gourmandes en permanence sinon la bdd :rip:.
-Si les identifiants ne se suivent pas (et même s'ils se suivent théoriquement, on sait jamais ce qui arrive), et qu'on est sur une grosse table donc avec un rand() proscrit, on fera:
Code PHP :<?php
$rand = rand(1,$mysql->sqlunique("select count(*) from villes"));
$ville = $mysql->sqlunique("select ame_villes from villes limit ".$rand.",1");
Si on l'utilise souvent on peut même modifier sa classe mysql pour ajouter une method sqlrandom par exemple.
Code PHP :
<?php
function sqlrandom($query,$table,$quantite=1)
{
$rand = $this->sqlunique("select count(*) from ".$table);
return $this->query($query.' limit '.$rand.','.$quantite);
//dans ma classe mysql la methode query renvoi l'identifiant du recordset qu'on pourra utiliser ensuite pour lire
}