Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка по двум таблицам
 
 автор: golovdinov   (10.04.2007 в 22:40)   письмо автору
 
 

у меня есть таблица с категориями статей categories:

name TINYTEXT,
title TINYTEXT,
date DATE


и таблица с самими статьями articles, где categ имя категории в которой находится эта статья:


categ TINYTEXT,
title TINYTEXT,
body TEXT


Как мне выбрать категории, в которых болшьшевсего статей? (например первые пять)

   
 
 автор: ШИМ   (10.04.2007 в 22:54)   письмо автору
 
   для: golovdinov   (10.04.2007 в 22:40)
 

Можно создать массив, где Ключами будут id категории, а значениями кол.статей!!!
Потом отсортировать массив по возростанию например, и вывести первых 5 ключей со значениями!
Ну это не самое легкое решение, можно как то по другому наверно

   
 
 автор: Trianon   (11.04.2007 в 09:18)   письмо автору
 
   для: golovdinov   (10.04.2007 в 22:40)
 

первичные и чужие ключи считаем пережитком?
В таком разе, по каким полям соединяются таблицы?

   
 
 автор: golovdinov   (11.04.2007 в 14:16)   письмо автору
 
   для: Trianon   (11.04.2007 в 09:18)
 

Ключи есть, просто хотел максимально просто таблицу показать, а сами они никак не соеденяются.
P.S.: не могли бы вы привести пример, как можно решить эту задачу?

   
 
 автор: Trianon   (11.04.2007 в 14:37)   письмо автору
 
   для: 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


Вуаля.

   
 
 автор: golovdinov   (11.04.2007 в 18:47)   письмо автору
 
   для: 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> ";
}
?>


Буду очень признателен, если вы напишите ваше мнение о таком решении :)

   
 
 автор: Trianon   (11.04.2007 в 18:57)   письмо автору
 
   для: golovdinov   (11.04.2007 в 18:47)
 

Всё, что я могу на это сказать, будет заменено на [поправлено модератором]
Так что лучше я промолчу.
Вам нравится - и очень хорошо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования