データベースに次のテーブルがあるとします。
POSTS:
id, title, content
CATEGORIES:
id, name
RELATION:
post_id, cat_id
投稿を公開している間、これらのテーブルに値を挿入することに成功しました。
また、ホームページのすべての投稿の下にカテゴリを表示することもできます。しかし、私が使用している方法は非常にリソースを消費するのではないかと心配しています。
これがMySQL/PHPで私がしていることです。
(コードをスキップして、理解を深めるためにその説明を読むことを選択できます)
//Get all the posts
$database = $connection->prepare("Select * FROM POSTS");
$database->execute(array());
$result = $database->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $r) {
$articleid = $r['id'];
//Display Post title and other things here
//Get the Category Ids
$database = $connection->prepare("Select * FROM RELATION WHERE post_id = ".$article);
$database->execute(array());
$ret_cat= $database->fetchAll(PDO::FETCH_ASSOC);
//Get names of category, and dislay them
foreach($ret_cat as $rc)
{
$catid = $rc['cat_id'];
$database = $connection->prepare("Select * FROM CATEGORIES WHERE cat_id= ".$catid);
$database->execute(array());
$ret_cat_name= $database->fetch(PDO::FETCH_ASSOC);
echo "<a href='index.php?category=".$rc['cat_id']."'>".$ret_cat_name['name']."</a> ";
}
}//End First ForEach
- 表から「必要なすべての投稿」を選択し
POSTS
ます。 - Foreachループを使用して、各投稿を表示します。
- foreachループ内で、別のSELECTステートメントを使用して、
RELATION
を照合することでテーブルからカテゴリを取得しますPOSTS.id
。 - 次に、別のforeachループを使用して、すべてのカテゴリを表示します。
ただし、RELATION
テーブルにはカテゴリIDしかないため、代わりにカテゴリの名前を表示する必要があります。
- そこで、別のSELECTステートメントを使用して、を使用して
CATEGORIES
テーブルからカテゴリの名前を取得しRELATION.cat_id
ます。
コードは正常に機能し、必要なものを取得できます。しかし、生成されているmysqlリクエストはたくさんあると思います。したがって、サーバーの負荷が増加します。
ですから、自分がしていることが正しいかどうかを知る必要があります。または、これをすべて行うためのより簡単な方法がある場合はどうなりますか?