Я ищу более чистый способ сделать это. Мой код работает, но я знаю, что он может быть лучше. У меня есть три таблицы: одна со списком групп категорий, одна со списком категорий, связанных с группами категорий, и одна со списком новостей, связанных с категориями.
Мне нужно пройтись по всем именам групп категорий, за которыми следуют названия категорий, входящих в группы категорий, с указанием количества новостей в каждой категории.
У меня есть три таблицы: КатегорияГруппы, Категории, Новости.
У меня есть набор запросов. Первый запрос всех строк из таблицы CategoryGroups:
$result = mysql_query( '
SELECT cat_group_id, cat_group_name FROM CategoryGroups
' );
Второй запрос находится внутри зацикленных результатов первого запроса и находит все категории, в которых есть новость и которые связаны с определенной группой категорий:
<?php
while( $row = mysql_fetch_assoc( $result ) ){
$id = $row['cat_group_id'];
$name = $row['cat_group_name'];
echo "<h3>$name</h3>";
$sql = mysql_query("
SELECT category_id, title FROM `Categories`
WHERE cat_group_id = $id
AND category_id IN
(SELECT news.category_id FROM news)
");
while( $row = mysql_fetch_assoc($sql) ) {
$title = $row['title'];
$catid = $row['category_id'];
$numbers = mysql_query("
SELECT * FROM news
WHERE category_id =$catid"
);
$nums = mysql_num_rows($numbers);
echo "$title ($nums)<br/>\n";
}
?>
Я хотел бы ограничить это одним или двумя запросами, имея в виду эффективность. Я знаю, что это можно сделать, однако мои попытки не увенчались успехом.
спасибо.