Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать скрипт "ПОХОЖИЕ СТАТЬИ" ? 
:(
    Опции темы
Kex
Дата 5.12.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Ребят, пытаюсь организовать "Похожие статьи" скрипт, который должен выводить в конце поста похожие статьи. Но вот проблема, боюсь на моем сайте этого сделать не получится. У меня сайт построен на связке PHP+MySQL, и  я как полагаю, этот скрипт должен находить метки других статей, и выводить эти статьи, но  у меня нет в таблице этого поля «Метки». А в базе 200 записей, врядли я буду в каждом поле прописывать метки, предварительно создав поле "Метки" в базе.  smile 
Поэтому пойду по другому пути – буду выводить наиболее читаемые статьи. Но здесь есть несколько проблем, и я не знаю, как их решить, знаний по PHP чуток не хватает, так что прошу у вас помощи. smile 
Итак, как мне видится это должно быть так организовано: 
Вывести из базы самые читаемые статьи не проблема, поскольку есть поле «view», но вывести напрямую их будет не правильно, поскольку статья, которая уже 1 год на сайте, будет естественно иметь больше всего просмотров, чем например, статья которой месяц. Поэтому, нужно вывести так называемый удельный просмотр, т.е. отношение количества просмотров к календарному сроку существования. Итак smile 

1.Выводим данные из базы (и дату добавления в UNIX формате)
2. Получаем сегодняшнюю дату UNIX формате.
3. Переопределяем массив в обычный PHP массив. И проводим следующие операции над каждыми статьями в массиве (п. 3-5).
3. Находим разность между датой добавления каждой статьи и сегодняшней датой.
4. Делим количество просмотров на разность.
5. Сортируем статьи. (И у статей, у которых будут результат деления самый маленький, идут в верх списка, как самые читаемые) smile 

И тут самое главное, не знаю как переопределить массив, который я вытянул из базу в обычный массив PHP  и провести над ним операции и отсортировать. smile 

Буду рад вашей помощи! smile 
 

PM MAIL   Вверх
Ипатьев
Дата 5.12.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



а почему бы и на сайте так прямо не написать - "самые популярные статьи"?

Это сообщение отредактировал(а) Ипатьев - 5.12.2009, 18:57
PM MAIL   Вверх
Kex
Дата 5.12.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(Ипатьев @  5.12.2009,  18:56 Найти цитируемый пост)
а почему бы и на сайте так прямо не написать - "самые популярные статьи"?

Я же так и хочу сделать, вот и говорю, про то, что просто вывести статьи с самым большим числом в поле "view" базы данных не совсем правильно. С этой точки вы не узнаете самые читаемые статьи, поскольку они были добавлены  вразное время. Нужно узнать количество  просмотров в месяц скажем, и на этом сравнении отсортировать. Тогда будет понятно, какая статья действительно популярна. 

PM MAIL   Вверх
awdev
Дата 6.12.2009, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 22.11.2009

Репутация: нет
Всего: 1



Предлагаю все же сделать по системе "тегов".

200 статей в бд.. 

Считаю сделать такой вариант, скрипт проходит по статьям, выдирает самые используемые слова, естественно с фильтром.

Далее на странице выводит какая статья - теги.. вы их редактируете..

После чего это все уходит в БД.

Не оптимально/оригинально, но за то более-менее будет попадать...


---
Второй вариант при создании новой статьи создавать ссылки на прошлые.
PM MAIL   Вверх
Kex
Дата 6.12.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



awdev, Так конечно можно сделать, как вы предлагаете, но число обращений к базе возрастает, что не есть гуд. smile 

Да!! Вобщем задач тяжелая..
Тогда задам другой вопрос, чисто технический smile 
Как из массива, который я получил из базы данных сделать массив PHP???
PM MAIL   Вверх
Ипатьев
Дата 6.12.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



У вас в голове полная каша.
Число обращений к базе не возрастет. А если бы и возрасло, но ничего плохого в этом не было бы.
А вот использовать базу данных на манер текстового файла - тягая всю информацию в пхп, и там ее обрабатывая - вот это, как раз "не есть гуд".
База данных придумана для того, чтобы все считать внутри, и выдавать только результат. Любой, какой нужен.

Но в первую очередь надо определиться, какие статьи вы хотие выводить. Самые популярные или похожие.



Это сообщение отредактировал(а) Ипатьев - 6.12.2009, 12:09
PM MAIL   Вверх
awdev
Дата 6.12.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 22.11.2009

Репутация: нет
Всего: 1



Не вижу где тут количество возрастает..

Обновление тегов 1й раз - да..

После чего теги достаются с помощью одного-2х запросов и не более

Это сообщение отредактировал(а) awdev - 6.12.2009, 12:15
PM MAIL   Вверх
Kex
Дата 6.12.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



OK!Давайте попробуем организовать скрипт похожие статьи!
1.Я создаю в базе поле "Metka", и что б оно не было пустым, по умалчанию какую нибудь ерунду в него пропысиваю типа "ЛЯ-ляля".
2.Скрипт обходит все статьи, и выбирает самые популярные слова в статье, исключая например всякие "и", "в", "на" и т.д.
3.Записывает эти слова в поле "Metka".
Это все мы делаем один раз, потом при создании статьи мы уже сами добавляем в поле "Metka" свои метки.
4. Потом просто выводим статьи со схожими метками.
Тепеть самая главная проблема, как написать фильтр, например выбирать пять самых популярных слов из статьи?

PM MAIL   Вверх
bars80080
Дата 6.12.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(Kex @  6.12.2009,  11:53 Найти цитируемый пост)
Тепеть самая главная проблема, как написать фильтр, например выбирать пять самых популярных слов из статьи?

бьём текст в массив слов (explode), утрясаем до уникальности (array_unique), отсеиваем короткие (strlen) и ряд слов из словаря, а затем ищем число вхождений подстроки в текст /функцию не помню, но она есть/
PM MAIL WWW   Вверх
Kex
Дата 6.12.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Вот сейчас вывел самые читаемые статьи, и одна проблемка возникла. На страницу с определнным id=28, выводятся самые читаемые статьи, но вот также выводится и ссылка на статью с id = 28, как это решить, чтобы выводились статьи, но без статьи с текущим id? 
PM MAIL   Вверх
awdev
Дата 6.12.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 22.11.2009

Репутация: нет
Всего: 1



И снова мимо, хранить записи в поле через запятую невыгодно.. Почитайте про формы КНФ.

Оптимальнее всего сделать с помощью таблиц.

1. Таблица Tags (id, tag), просто слова теги
2. Связи. Relation (idtag, idarticle)

Таблицу статей вообще не трогаем.


Когда нужно узнать какие теги на статье, делаем запрос: "SELECT tag from tags where id in(select idtag from relation where idarcticle=10)" - не огонь, но ради 200 статей сойдет.


Собственно нам нужно найти статьи у которых теги совпадают:
SELECT * from arcticle where id in (select idacticle from relation where idtag in (select idtag from relation where idarticle=10 ) ) and id!=10

1. Сначала выбираются все ИД тегов для статьи №10.
2. Далее выбираются все ИД статеи у которых теги совпадают с тегами стати №10
3. Выбираются вся инфа статей
------------

По поводу создания первичных тегов.. тут да, другого варианта как выцепление слов я не вижу.

Алгоритм по идее след.:
1) Взять статью
2) Убрать все точки, запятые, восклицательные знаки, вопросительные и тд
3) сделать буквы одного регистра
4) удалить переносы строк и двойные пробелы
5) разбить текст по признаку пробел.
6) Подсчитать сколько слово встречается, исключая слова длинной менее 2-3-4 символов.
7) Запомнить вывести результат
8) Если еще есть статьи, идти в пункт 1.

После того как будет пройдено, на странице будет предложены теги.
Отредактируйте и заполните согласно структуре что я предложил

Должно работать  smile 

Желаю удачи.
PM MAIL   Вверх
Kex
Дата 6.12.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Хорошо,awdev, я еще подумаю над этим скриптом, ну а пока делаю самую простую вещь, самые читаемые статьи, и вот проблема
Цитата

Вот сейчас вывел самые читаемые статьи, и одна проблемка возникла. На страницу с определнным id=28, выводятся самые читаемые статьи, но вот также выводится и ссылка на статью с id = 28, как это решить, чтобы выводились статьи, но без статьи с текущим id? 
 
как решить?
PM MAIL   Вверх
awdev
Дата 6.12.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 22.11.2009

Репутация: нет
Всего: 1



http://www.w3schools.com/php/php_mysql_where.asp

Простыми словами:

выбрать все статьи где АЙДИ!=28


Вообще говоря... я бы вам порекомендовал сначала бы почитать соответствующую литературу, а потом, если не ясно, спрашивать. Потому как желание отвечать на банальные вопросы нет вообще.

Всего доброго
PM MAIL   Вверх
Kex
Дата 6.12.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Мне нужно вывести все статьи кроме id=28!!
PM MAIL   Вверх
Kex
Дата 6.12.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



У меня две таблицы - одна с пунктами меню, а вторая со статьями.
И у таблицы со статьями есть кроме id поле menu (int).
И вот я выважу популярные статьи из какого то раздела  по следующему запросу
Код

$result = mysql_query ("SELECT id, title FROM data WHERE menu = '$put_menu' ORDER BY view DESC LIMIT 5",$db);

вывожу статьи, у которых поле "menu" равно например 5, и выводится все ссылки, в том числе и с текущей статьей. Вот как ее исключить? 

Это сообщение отредактировал(а) Kex - 6.12.2009, 19:18
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.