|
|
|
| у меня есть таблица с категориями статей categories:
name TINYTEXT,
title TINYTEXT,
date DATE
|
и таблица с самими статьями articles, где categ имя категории в которой находится эта статья:
categ TINYTEXT,
title TINYTEXT,
body TEXT
|
Как мне выбрать категории, в которых болшьшевсего статей? (например первые пять) | |
|
|
|
|
|
|
|
для: golovdinov
(10.04.2007 в 22:40)
| | Можно создать массив, где Ключами будут id категории, а значениями кол.статей!!!
Потом отсортировать массив по возростанию например, и вывести первых 5 ключей со значениями!
Ну это не самое легкое решение, можно как то по другому наверно | |
|
|
|
|
|
|
|
для: golovdinov
(10.04.2007 в 22:40)
| | первичные и чужие ключи считаем пережитком?
В таком разе, по каким полям соединяются таблицы? | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2007 в 09:18)
| | Ключи есть, просто хотел максимально просто таблицу показать, а сами они никак не соеденяются.
P.S.: не могли бы вы привести пример, как можно решить эту задачу? | |
|
|
|
|
|
|
|
для: golovdinov
(11.04.2007 в 14:16)
| | Очень просто решается эта задача.
Вычисляется количество статей в каждой категории:
SELECT cat_id, COUNT(id) AS art_cnt
FROM articles
GROUP BY cat_id
|
Результат объявляется отдельной таблицей
(SELECT cat_id, COUNT(id) AS cnt
FROM articles
GROUP BY cat_id ) AS art_cnt
|
и соединяется с таблицей категорий:
SELECT c.*, cnt
FROM categories AS c
LEFT JOIN (SELECT cat_id, COUNT(id) AS cnt
FROM articles
GROUP BY cat_id ) AS art_cnt
ON c.id = art_cnt.cat_id
ORDER BY cnt DESC
|
Вуаля. | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2007 в 14:37)
| | Я эту проблему решил самым неожиданным для меня способом: для того что бы показать в каких разделах больше всего статей, я использовал размер шрифта как здесь (почти :) http://cards.yandex.ru
<?
$cats = array ();
$headers = array ();
$names = array ();
$descs = array ();
// Выбираем разделы
$sel = $db->query ("SELECT cat_name, cat_header, cat_description FROM ".DB_PEREFIX."_art_category");
while (list($name, $header, $desc) = $db->fetch_row($sel)) {
// Количество статей в этом разделе
$art = $db->num_rows ($db->query ("SELECT * FROM ".DB_PEREFIX."_articles WHERE art_category = '$name' AND art_publik = 'yes' AND art_like_page = 'no'"));
// Добавляем в массивы некоторые параметры и количество статей в разделе
array_push ($cats, $art);
array_push ($names, $name);
array_push ($descs, $desc);
array_push ($headers, $header);
}
for ($i=0; $i<count($cats); $i++) {
// Начальный размер (самый большой)
$size = 31;
// Проверяем есть ли разделы с большим количеством статей, если да, то уменьшаем размер
for ($t=0; $t<count($cats); $t++) if ($cats[$i] <= $cats[$t]) $size = $size-4;
// Ну и выводим разделы встрочку
if ($size < 10) $size = 10;
print "\n<a href=\"modules.php?name={$names[$i]}\" title=\"{$descs[$i]}\" style=\"font-size:{$size}px\">{$headers[$i]}</a> ";
}
?>
|
Буду очень признателен, если вы напишите ваше мнение о таком решении :) | |
|
|
|
|
|
|
|
для: golovdinov
(11.04.2007 в 18:47)
| | Всё, что я могу на это сказать, будет заменено на [поправлено модератором]
Так что лучше я промолчу.
Вам нравится - и очень хорошо. | |
|
|
|