![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
Ребят, пытаюсь организовать "Похожие статьи" скрипт, который должен выводить в конце поста похожие статьи. Но вот проблема, боюсь на моем сайте этого сделать не получится. У меня сайт построен на связке PHP+MySQL, и я как полагаю, этот скрипт должен находить метки других статей, и выводить эти статьи, но у меня нет в таблице этого поля «Метки». А в базе 200 записей, врядли я буду в каждом поле прописывать метки, предварительно создав поле "Метки" в базе.
Поэтому пойду по другому пути – буду выводить наиболее читаемые статьи. Но здесь есть несколько проблем, и я не знаю, как их решить, знаний по PHP чуток не хватает, так что прошу у вас помощи. Итак, как мне видится это должно быть так организовано: Вывести из базы самые читаемые статьи не проблема, поскольку есть поле «view», но вывести напрямую их будет не правильно, поскольку статья, которая уже 1 год на сайте, будет естественно иметь больше всего просмотров, чем например, статья которой месяц. Поэтому, нужно вывести так называемый удельный просмотр, т.е. отношение количества просмотров к календарному сроку существования. Итак 1.Выводим данные из базы (и дату добавления в UNIX формате) 2. Получаем сегодняшнюю дату UNIX формате. 3. Переопределяем массив в обычный PHP массив. И проводим следующие операции над каждыми статьями в массиве (п. 3-5). 3. Находим разность между датой добавления каждой статьи и сегодняшней датой. 4. Делим количество просмотров на разность. 5. Сортируем статьи. (И у статей, у которых будут результат деления самый маленький, идут в верх списка, как самые читаемые) И тут самое главное, не знаю как переопределить массив, который я вытянул из базу в обычный массив PHP и провести над ним операции и отсортировать. Буду рад вашей помощи! |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
а почему бы и на сайте так прямо не написать - "самые популярные статьи"?
Это сообщение отредактировал(а) Ипатьев - 5.12.2009, 18:57 |
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
Я же так и хочу сделать, вот и говорю, про то, что просто вывести статьи с самым большим числом в поле "view" базы данных не совсем правильно. С этой точки вы не узнаете самые читаемые статьи, поскольку они были добавлены вразное время. Нужно узнать количество просмотров в месяц скажем, и на этом сравнении отсортировать. Тогда будет понятно, какая статья действительно популярна. |
|||
|
||||
| awdev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
Предлагаю все же сделать по системе "тегов".
200 статей в бд.. Считаю сделать такой вариант, скрипт проходит по статьям, выдирает самые используемые слова, естественно с фильтром. Далее на странице выводит какая статья - теги.. вы их редактируете.. После чего это все уходит в БД. Не оптимально/оригинально, но за то более-менее будет попадать... --- Второй вариант при создании новой статьи создавать ссылки на прошлые. |
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
awdev, Так конечно можно сделать, как вы предлагаете, но число обращений к базе возрастает, что не есть гуд.
Да!! Вобщем задач тяжелая.. Тогда задам другой вопрос, чисто технический Как из массива, который я получил из базы данных сделать массив PHP??? |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
У вас в голове полная каша.
Число обращений к базе не возрастет. А если бы и возрасло, но ничего плохого в этом не было бы. А вот использовать базу данных на манер текстового файла - тягая всю информацию в пхп, и там ее обрабатывая - вот это, как раз "не есть гуд". База данных придумана для того, чтобы все считать внутри, и выдавать только результат. Любой, какой нужен. Но в первую очередь надо определиться, какие статьи вы хотие выводить. Самые популярные или похожие. Это сообщение отредактировал(а) Ипатьев - 6.12.2009, 12:09 |
|||
|
||||
| awdev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
Не вижу где тут количество возрастает..
Обновление тегов 1й раз - да.. После чего теги достаются с помощью одного-2х запросов и не более Это сообщение отредактировал(а) awdev - 6.12.2009, 12:15 |
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
OK!Давайте попробуем организовать скрипт похожие статьи!
1.Я создаю в базе поле "Metka", и что б оно не было пустым, по умалчанию какую нибудь ерунду в него пропысиваю типа "ЛЯ-ляля". 2.Скрипт обходит все статьи, и выбирает самые популярные слова в статье, исключая например всякие "и", "в", "на" и т.д. 3.Записывает эти слова в поле "Metka". Это все мы делаем один раз, потом при создании статьи мы уже сами добавляем в поле "Metka" свои метки. 4. Потом просто выводим статьи со схожими метками. Тепеть самая главная проблема, как написать фильтр, например выбирать пять самых популярных слов из статьи? |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
бьём текст в массив слов (explode), утрясаем до уникальности (array_unique), отсеиваем короткие (strlen) и ряд слов из словаря, а затем ищем число вхождений подстроки в текст /функцию не помню, но она есть/ |
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
Вот сейчас вывел самые читаемые статьи, и одна проблемка возникла. На страницу с определнным id=28, выводятся самые читаемые статьи, но вот также выводится и ссылка на статью с id = 28, как это решить, чтобы выводились статьи, но без статьи с текущим id?
|
|||
|
||||
| awdev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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. После того как будет пройдено, на странице будет предложены теги. Отредактируйте и заполните согласно структуре что я предложил Должно работать Желаю удачи. |
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
Хорошо,awdev, я еще подумаю над этим скриптом, ну а пока делаю самую простую вещь, самые читаемые статьи, и вот проблема
как решить? |
|||
|
||||
| awdev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
http://www.w3schools.com/php/php_mysql_where.asp
Простыми словами: выбрать все статьи где АЙДИ!=28 Вообще говоря... я бы вам порекомендовал сначала бы почитать соответствующую литературу, а потом, если не ясно, спрашивать. Потому как желание отвечать на банальные вопросы нет вообще. Всего доброго |
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
Мне нужно вывести все статьи кроме id=28!!
|
|||
|
||||
| Kex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 2.10.2008 Репутация: нет Всего: нет |
У меня две таблицы - одна с пунктами меню, а вторая со статьями.
И у таблицы со статьями есть кроме id поле menu (int). И вот я выважу популярные статьи из какого то раздела по следующему запросу
вывожу статьи, у которых поле "menu" равно например 5, и выводится все ссылки, в том числе и с текущей статьей. Вот как ее исключить? Это сообщение отредактировал(а) Kex - 6.12.2009, 19:18 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |