私はphp-blogシステムを構築していて、スタートページに各ユーザーから最大5つを除くすべての投稿を表示したいと考えています。データベースのクエリでこれを行うことを考えていますが、それを行う方法がわかりません。count()関数は便利だと思いますが、誰かが私を助けることができます
これは今日の私の機能です。各ユーザーから最大5つの投稿を取得できるように改善したいだけです。
protected function getAllPostsDB() {
$sql = "SELECT recipes.Recipe_ID, recipes.Title, recipes.Short_description, recipes.Step_by_step,
recipes.create_date, recipes.last_mod_date, recipes.Portions, recipes.imgPath, users.Username
FROM recipes
JOIN users
ON recipes.User_ID = users.User_ID
ORDER BY recipes.create_date DESC";
$stmt = $this->connect()->query($sql);
/* fetch all is already set to associative array*/
$result = $stmt->fetchAll();
return $result;`
MySQL 8.0を実行している場合は、ウィンドウ関数を使用するだけです。
SELECT r.Recipe_ID, r.Title, r.Short_description, r.Step_by_step,
r.create_date, r.last_mod_date, r.Portions, r.imgPath, u.Username
FROM (
SELECT r.*, ROW_NUMBER() OVER(PARTITION BY User_ID ORDER BY create_date DESC) rn
FROM recipes r
) r
INNER JOIN users ON r.User_ID = u.User_ID
WHERE r.rn <= 5
ORDER BY r.create_date DESC
これにより、columnで指定されているように、ユーザーごとに最後の5つのレシピが表示されますcreate_date
。別の並べ替え規則が必要な場合は、のORDER BY
句をROW_NUMBER()
他の列または列のセットに変更できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加