PHP/MySQLでメインカテゴリとそのサブカテゴリに属する投稿の総数をカウントする必要があります。PHPのメインカテゴリとサブカテゴリに属する投稿の総数をカウントするMySQL
tb_categories
tb_posts
tb_posts_to_categories
:私はによって与えられた3つのテーブルを持っています今総カテゴリに属する記事の数とそのすべてのサブカテゴリを得るために、私は次のコードを使用してい:
<?php
include("includes/db-config.php");
// Create connection
$connection = @mysqli_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME)
or die(mysqli_connect_error());
// Get total number of posts in a category
function get_post_counts($category_id)
{
global $connection;
$category_to_post = array();
// Build database query
$sql = "SELECT COUNT(`post_id`) AS `post_count`, `category_id` FROM `tb_posts_to_categories` GROUP BY `category_id`";
// Execute database query
$rs = mysqli_query($connection, $sql);
while($row = mysqli_fetch_assoc($rs))
{
$category_to_post[$row['category_id']] = $row['post_count'];
}
// Build database query
$sql2 = "SELECT `category_id`, `category_parent` FROM `tb_categories` WHERE `category_parent` <> 0";
// Execute database query
$rs2 = mysqli_query($connection, $sql2);
while($row2 = mysqli_fetch_assoc($rs2))
{
$category_to_post[$row2['category_parent']] += $category_to_post[$row2['category_id']];
}
return $category_to_post[$category_id];
}
$total_posts = get_post_counts(2);
echo $total_posts;
?>
出力
しかし、この出力は正しくありません。サブカテゴリIDを指定した場合、出力は正しいです。親カテゴリIDが関数に与えられると、それはちょっと混乱します。
私は1対多の関係を持っています。投稿は複数のカテゴリに割り当てられ、さらにそのサブカテゴリにも割り当てられます。 2つ以上のカテゴリ(1つのメインカテゴリとそのサブカテゴリ)に関連付けられた投稿が再び計算され、8の代わりに結果11が返されます。
ただし、投稿が2つの異なる親カテゴリまたはそのいずれかに関連付けられている場合サブカテゴリ。この問題は、投稿がメインカテゴリと複数のサブカテゴリに関連付けられている場合にのみ発生します。どうやって間違った計算を修正できますか?この人に私を助けてください。ありがとう!
メインクエリで 'SELECT COUNT(distinct post_id)AS post_count'を試してください。 –
動作しませんでした。メインのクエリで 'category_id'が必要です。 \ 'COUNT(DISTINCT \' post_id \ ')\ 'を単独で使うことはできません。その後、エラーが発生します。 'category_id'でそれを使うことは効果がありません。同じ結果。 – user5307298