SQL statement
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);
}
Pengeluaran
<?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 } ?>
Tajuk boleh diekstrak tetapi ID tidak boleh diekstrak?
Tiada ralat dalam tajuk data yang diekstrak ini, tetapi mengapa semua ID adalah sama, iaitu ID medan tajuk yang sepadan tidak diekstrak? Apa yang salah dengan SQL? Di bawah bimbingan tuan-tuan semua
Medan tajuk ialah tajuk dan medan id ialah id
Lihatlah
*
换成t1.*
Pertama: Jika t1.id >= t2.id dalam pertanyaan jadual penyertaan anda, data pendua akan muncul, walaupun algoritma anda nampaknya kurang berkemungkinan berbuat demikian.
Kedua: Set hasil mengandungi berbilang medan id. Medan id terakhir selepas pilihan dalam hasil yang dikeluarkan oleh PHP sudah tentu, pengoptimum pertanyaan juga boleh mengubah susunan lajur selepas pilihan.