私は投票システムを構築しています。2つのテーブルがあります。1つは投票用、もう1つは投票中のアイテム用です。この例では、アイテムはスレッドです。
まず、アイテムを入手します。
次に、アイテムの投票を取得してカウントします。
第三に、総投票数に基づいた順序でアイテムを表示したいと思います。
$q = $db_conn->prepare('SELECT id, title FROM thread');
$q->execute();
$q->bind_result($threadid, $title);
$q->store_result();
while($q->fetch()){
$q2 = $db_conn->prepare('SELECT value FROM vote WHERE item_id = ? AND item_type_id = 1');
$q2->bind_param('i', $threadid);
$q2->execute();
$q2->bind_result($value);
$totvalue = 0;
while($q2->fetch()){
$totvalue += $value;
}?>
<span style='color:grey;'>[<?php echo $totvalue; ?>]</span>
<form class='thread' method='POST'>
<input type='image' name='vote' value='up' src='media/img/uparrow.png' />
<input type='image' name='vote' value='down' src='media/img/downarrow.png' />
<input type='hidden' name='threadid' value='<?php echo $threadid; ?>' />
</form>
<?php echo $title . "<br />";
//DISPLAYS BY ID
}
私が見つけた唯一の方法は、結果を配列に入れて、そのように並べ替えることです。しかし、サイトに大量のアイテムがある場合は、テーブル全体を配列に配置することは意味がありません。
$threads[] = array('threadid' => $threadid, 'title' => $title, 'totvalue' => $totvalue);
foreach ($threads as $key => $row) {
$tid[$key] = $row['threadid'];
$title[$key] = $row['title'];
$tval[$key] = $row['totvalue'];
} array_multisort($tval, SORT_DESC, $tid, SORT_DESC, $tval, SORT_DESC, $threads);
foreach ($threads as $t) { ?>
<span style='color:grey;'>[<?php echo $t['totvalue']; ?>]</span>
<form class='thread' method='POST'>
<input type='image' name='vote' value='up' src='media/img/uparrow.png' />
<input type='image' name='vote' value='down' src='media/img/downarrow.png' />
<input type='hidden' name='threadid' value='<?php echo $t['threadid']; ?>' />
</form>
<?php echo $t['title'] . "<br />";
//DISPLAYS BY TOTAL VOTES YET THE SOLUTION IS HORRID
}
MySQLでそれを行う方法はありますか?または他の最適なソリューションはありますか?