Maison > Questions et réponses > le corps du texte
Instruction SQL
public function get_radom_article(){
$table1 = $this->get_table('article') ;
$sql = 'SELECT *
FROM `'.$table1 .'` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `'.$table1 .'`)-(SELECT MIN(id) FROM `'.$table1 .'`))+(SELECT MIN(id) FROM `'.$table1 .'`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 10';
return $this->query_all($sql);
}
Extraction
<?php foreach($this->radom_articles AS $key => $val) { ?>
<li><a href="article/<?php echo $val['id']; ?>" title="<?php echo $val['title']; ?>"><?php echo $val['title']; ?></a></li>
<?php } ?>
Le titre peut être extrait mais l'identifiant ne peut pas être extrait ?
Il n'y a aucune erreur dans les titres de ces données extraites, mais pourquoi tous les identifiants sont-ils identiques, c'est-à-dire que l'ID du champ de titre correspondant n'est pas extrait ? Qu'est-ce qui n'a pas fonctionné avec SQL ? Sous la houlette de tous les maîtres
Le champ titre est titre et le champ identifiant est id
过去多啦不再A梦2017-06-10 09:49:31
Premièrement : si t1.id >= t2.id dans votre requête de table de jointure, les données en double apparaîtront déjà, bien que votre algorithme semble moins susceptible de le faire.
Deuxième : le jeu de résultats contient plusieurs champs d'identifiant. Le dernier champ d'identifiant après la sélection dans le résultat extrait par PHP écrasera la valeur précédente. Bien entendu, l'optimiseur de requête peut également modifier l'ordre des colonnes après la sélection.