PHPの「mb_detect_encoding」を使って読み込みファイルのエンコード処理
外部ファイル(CSVファイル等)を読み込んでサイト内に表示する際に、保存時の文字コードが…
毎月のランキングを集計していた際、項目数が最大数に満たない場合に残りの部分をランダムで取得・掲載していますが、その際に既に掲載対象となっているものと重複しないよう「NOT IN」を使用した際の方法をメモ。
$rankingsql = $db->query('SELECT id FROM tbl_post WHERE clicks != '' ORDER BY clicks DESC);
$num = $rankingsql->rowCount();
$notin = '';
$i = 0;
while($row = $rankingsql->fetch(PDO::FETCH_ASSOC)){
if($i == 0){
$notin = $row['id']
}else{
$notin .= ','.$row['id']
}
$i++;
}
$limit = 20 - $num;
$moresql = $db->query('SELECT id FROM tbl_post WHERE id NOT IN ('.$notin.') ORDER BY RAND() LIMIT '.$limit.'';
テーブル「tbl_post」からクリック数「clicks」が登録されているものを選出。
該当する投稿ID「id」を変数「$notin」に格納し、不足分(今回は20件から$numを差し引いたもの)を「$notin」を除いた中からランダムで再取得しています。