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

Форум PHP

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

 

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

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

тема: ключевые слова в блоге
 
 автор: Keks   (23.08.2008 в 17:08)   письмо автору
 
 

добрый день!
подскажите, пожалуйста, как можно реализовать "облако тегов" для блога? у меня в Базе данных есть таблица tags: id_tag, word, id_post, где первое поле - первичный ключ с порядковым номером ключевого слова, второе поле - само слово и третье - номер поста в блоге, которому эта метка принадлежит. мне интересно узнать, как сделать все теги разными размерами шрифта (в зависимости от количества употребления этого тега) ну и сама сортировка, конечно.
зараннее благодарен!

  Ответить  
 
 автор: Trianon   (23.08.2008 в 17:26)   письмо автору
 
   для: Keks   (23.08.2008 в 17:08)
 

как выглядят записи, когда одно слово принадлежит нескольким постам?

  Ответить  
 
 автор: Keks   (23.08.2008 в 18:08)   письмо автору
 
   для: Trianon   (23.08.2008 в 17:26)
 

ну когда пользователь пишет новый пост он через запятую записывает в специальное поле ключевые слова, и для каждого записанного ключевого слова в таблице tags в поле id_tag записывается уникальный порядковый номер тега, в поле word - само ключевое слово, а в id_post - номер поста из таблицы posts (там это тоже первичный ключ). то есть одно ключевое слово может встречаться несколько раз. и номер id_post в таблице tags так же может попадаться несколько раз

  Ответить  
 
 автор: Trianon   (23.08.2008 в 18:21)   письмо автору
 
   для: Keks   (23.08.2008 в 18:08)
 

напрашивается более разумная структура хранения.
words(id_word, word)
tags(id_post, id_word)


SELECT word, cnt 
  FROM 
  ( SELECT id_word, COUNT(id_post) AS cnt 
      FROM tags 
       GROUP BY id_word 
        HAVING cnt > 4
  ) AS wc 
 JOIN words ON words.id_word = wc.id_word
  ORDER BY RAND()

  Ответить  
 
 автор: Keks   (23.08.2008 в 18:36)   письмо автору
 
   для: Trianon   (23.08.2008 в 18:21)
 

спасибо. а как сделать присвоение стилей тегам которые используются бОльшее количество раз?

  Ответить  
 
 автор: Trianon   (23.08.2008 в 19:09)   письмо автору
 
   для: Keks   (23.08.2008 в 18:36)
 

Разбить весь спектр частот на диапазоны по числу заведенных стилей.
В самом примитивном случае:

$style_no = 4;
for($counts=array(); $row = mysql_fetch_assoc($res); $counts[$row['word']] = intval($row['cnt']));
$maxcnt = array_max($counts) ; 
$mincnt = array_min($counts) ; 
$range  = $maxcnt -$mincnt +1;

$styles = array();
foreach($counts as $word => $cnt)
{
    $style_no = intval(($cnt - $mincnt) / $range);
    $styles[$word] = "style$style_no";
}

  Ответить  
 
 автор: Keks   (24.08.2008 в 20:11)   письмо автору
 
   для: Trianon   (23.08.2008 в 19:09)
 

в таком случае php жалуется на несуществующие функции array_max() и array_min() :( или их надо писать вручную?

  Ответить  
 
 автор: Trianon   (24.08.2008 в 20:25)   письмо автору
 
   для: Keks   (24.08.2008 в 20:11)
 

можно просто поменять на max() и min()

  Ответить  
 
 автор: Keks   (24.08.2008 в 23:00)   письмо автору
 
   для: Trianon   (24.08.2008 в 20:25)
 

ну в этом худо-бедно разобрался, спасибо Вам большое за помощь :) и еще последний ламерский вопрос: для поля id_word в таблице words надо прописывать первичный ключ и одно и то же слово в эту таблицу можно добавлять несколько раз? или же нельзя допускать дублирования одного и того же слова в таблице words?

  Ответить  
 
 автор: Trianon   (24.08.2008 в 23:05)   письмо автору
 
   для: Keks   (24.08.2008 в 23:00)
 

В этой таблице столько строк, сколько набралось разных слов.
Зачем добавлять их несколько раз?
Будучи однажды добавленным, слово уже имеет свой id_word

А вот в таблице tags могут повторяться как id_post так и id_word .
Лишь бы не оба сразу.
Можно создать составной ключ на этих двух полях. Уникальный.
И по индексу обычному - на каждое из полей.

  Ответить  
Rambler's Top100
вверх

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