1. Главная
  2. Статьи
  3. Вопрос-Ответ
  4. Новости
  5. Форум
  6. Вики
Вход   Регистрация

Биржа комментариев

СМС рассылки

Партнерские программы

Бесплатное продвижение сайтов

VPS хостинг

Кабель оптом

Качественный контент

Офисная мебель Проспект

Сортировка по тегам. Вывод «читайте еще» по ключевым словам. PHP скрипт

Если у Вас есть статьи, новости или посты на блоге, и Вы хотите к этим записям присваивать теги или заметки, что бы потом сортировать вашу информацию на сайте по этим тегам, то я предлагаю Вам:
PHP скрипт, который, который будет возле каждой статьи, новости, записи, выводил несколько соответствующих записей. Типа, «читайте так же...», «Вам так же может быть интересно...», «Рекомендую» и тому подобные предложения посетить другие страницы Вашего сайта или блога.

Очевидно, что выводить такую информацию нужно «в тему», то есть соответствующую той информации, о которой посетитель в данный момент читает/смотрит. Отсортировать по соответствию статьи/новости/посты на блоге можно (и мы будим) по тегам/заметкам, которые мы привяжем к каждой нашей записи.

Мы будим иметь статью/новость/пост (далее просто статья) к которой привязано несколько тегов (ключевых слов). Сортируя по этим тегам будем выводить наиболее соответствующие статьи, для примера этих статьей будет 3.

Оптимально, для осуществления такой возможности в MySQL базе нужно создать три таблицы:

  • таблица самой статьи article с первичным ключом id
  • таблица tag с полями первичный ключ id и имя тега name
  • tag_article с двумя полями:
    • id_article – id нашей статьи
    • id_tag – id тега который соответствует статье

Благодаря такому принципу у Вас не будут создаваться дубли тегов – один тег имеет одну запись в таблице.
Для каждой записи Вы можете присваивать несколько тегов (посредством записи в таблице tag_article) и, соответственно, для каждого тега могут быть несколько статей.

Выбора списка тегов, которые соответствуют нашей статье (для примера, 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
Окончательный 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 ($ids_of_tag)
	AND article.id <> 1
  GROUP BY  article.id
  ORDER BY  COUNT(*) DESC
  LIMIT 3

Напомню, в примере извлечение осуществляется для статьи с айди = 1.
Надеюсь, я представил максимально понятно, как это работает. Этот PHP скрипт рабочий, он используется на некоторых сайтах, где выводит в конце статьи максимально соответствующие другие статьи.

Читайте так же: PHP скрипт: создать облако тегов

Категория статьи: Веб-программирование | Просмотров: 4663 | Добавлена: 22.03.2013

Почему Вы еще не прокомментировали?
Оставьте свой комментарий! Весь Интернет уже заждался!

Ваше Имя Муж. Жен. Как Вас величать?
Антиспам защита

– Напишите название этого сайта по-русски
(если Вы не в курсе, сайт называется "РапидАп")

Текст комментария
 
О сайте ⋅  Контакты