Вход Регистрация |
Сортировка по тегам. Вывод «читайте еще» по ключевым словам. PHP скриптЕсли у Вас есть статьи, новости или посты на блоге, и Вы хотите к этим записям присваивать теги или заметки, что бы потом сортировать вашу информацию на сайте по этим тегам, то я предлагаю Вам: Очевидно, что выводить такую информацию нужно «в тему», то есть соответствующую той информации, о которой посетитель в данный момент читает/смотрит. Отсортировать по соответствию статьи/новости/посты на блоге можно (и мы будим) по тегам/заметкам, которые мы привяжем к каждой нашей записи. Мы будим иметь статью/новость/пост (далее просто статья) к которой привязано несколько тегов (ключевых слов). Сортируя по этим тегам будем выводить наиболее соответствующие статьи, для примера этих статьей будет 3. Оптимально, для осуществления такой возможности в MySQL базе нужно создать три таблицы:
Благодаря такому принципу у Вас не будут создаваться дубли тегов – один тег имеет одну запись в таблице. Выбора списка тегов, которые соответствуют нашей статье (для примера, id статьи 1) – php запрос: SELECT tag.* FROM tag INNER JOIN tag_article ON tag.id = tag_article.id_tag WHERE tag_article.id_article = 1 Для получения трех (как мы договорились) наиболее подобных статей необходимо сделать: PHP запрос: SELECT article.id, count(*) AS nb_identical_tags FROM article INNER JOIN tag_article ON tag_article.id_article = article.id INNER JOIN tag ON tag.id = tag_article.id_tag WHERE tag.name IN ('php', 'mysql', 'query') AND article.id <> 1 GROUP BY article.id ORDER BY COUNT(*) DESC LIMIT 3 'php', 'mysql', 'query' – это наши теги (ключевые слова). Мы их взяли чисто для примера. Теперь нужно взять все теги и запишем их в строку. <?php $ids_of_tag = "'"; while ($myrow = mysql_fetch_array($result)) { $ids_of_tag .= $myrow['name']."','"; } $ids_of_tag .= "'"; ?> Теперь у нас есть список тегов нашей статьи: $ids_of_tag SELECT article.id, count(*) AS nb_identical_tags FROM article INNER JOIN tag_article ON tag_article.id_article = article.id INNER JOIN tag ON tag.id = tag_article.id_tag WHERE tag.name IN ($ids_of_tag) AND article.id <> 1 GROUP BY article.id ORDER BY COUNT(*) DESC LIMIT 3 Напомню, в примере извлечение осуществляется для статьи с айди = 1. Читайте так же: PHP скрипт: создать облако тегов Категория статьи: Веб-программирование | Просмотров: 4663 | Добавлена:
22.03.2013
Почему Вы еще не прокомментировали? |