#php #mysql
#php #mysql
Вопрос:
К сожалению, у Google, похоже, не было ответов, которые я хотел. В настоящее время у меня есть небольшой веб-сайт поисковой системы для определенного контента, использующий PHP GET.
Я хочу добавить страницу последних поисковых запросов, что означает, что каждый поиск будет записываться, сохраняться, а затем отображаться на другой странице с надписью «наиболее просматриваемый» вверху или даже «последний поиск» вверху.
Вкратце: сохраните мои последние результаты поиска в базе данных MySQL (или во всем, что будет работать), и впоследствии отобразите их на странице.
Я предполагаю, что это лучше всего было бы выполнить с помощью MySQL, а затем я хотел бы вывести это в PHP.
Любая помощь приветствуется.
Комментарии:
1. Извините, перефразировал мой вопрос.
2. Я все еще не вижу никаких вопросов… Вы спрашиваете нас о нашем мнении или советуете лучшее решение для этого?
3. Совет по наилучшему решению, поскольку поиск вокруг не дал мне надежных ответов.
4.
or anything that'll work
Что ж… Зависит от того, какие хранилища у вас есть? Это могут быть memcached, APC, Redis, files… что угодно. Для этого я использую APC.5. @Dboy1612: Хорошо, так сделай это!
Ответ №1:
Недавними поисковыми запросами можно легко злоупотреблять. Все, что мне нужно сделать, это зайти на ваш сайт и выполнить поиск «ваш сайт отстой» или что похуже, и они, по сути, испортили ваш сайт. Я бы действительно подумал о добавлении этой функции.
С точки зрения построения наиболее популярных поисковых запросов и их удобного масштабирования я бы рекомендовал:
- Регистрируйте запросы где-нибудь. Могла бы быть таблица базы данных MySQL, но лог-файл был бы более разумным, поскольку это журнал.
- Периодически запускайте скрипт / задание для извлечения / группировки данных из журнала
- Пусть это периодическое задание скрипта заполнит некоторую таблицу наиболее популярными поисковыми запросами
Мне нравится этот подход, потому что:
- Серверный скрипт выполняет всю тяжелую работу — нет ГРУППИРОВАНИЯ по и т.д., выполняемых пользовательскими запросами
- Вы можете ввести фильтрацию или любую другую логику в серверный скрипт, и это не повлияет на запросы пользователя
- Вам никогда не нужно помещать большие объемы данных в базу данных
Комментарии:
1. Я бы подумал о том, чтобы не добавлять эту функцию.
2. В чем преимущество хранения «больших объемов данных» в плоском файле, а не в базе данных (которая на самом деле предназначена для этой задачи)?
3. чтобы предотвратить подобные «искажения», вы можете просто фильтровать запросы. это можно легко сделать «на лету», без подготовки. В этих условиях текст любого пользователя может «испортить» сайт (комментарии, блоги, твиты и т.д.).
4. @Tomalak за исключением точки, в которой вы хотите объединить эти данные, нет необходимости размещать их в RDBMS. Вы тратите впустую быстрое хранилище базы данных / индекс, хранящий данные, которые вам редко нужны, и которые станут устаревшими.
5. @OZ_ вы могли бы сделать, но выполнение этой работы по фильтрации означает, что вам нужно выполнять ее только один раз (при каждом запуске серверного скрипта) вместо того, чтобы использовать эти циклы процессора для фильтрации по каждому отдельному запросу пользователя. Это может быть проблемой только на веб-сайте с высоким трафиком.
Ответ №2:
Создайте базу данных, создайте таблицу (например recent_searches
) и такие поля, как query
(запрос был выполнен) и timestamp
(временная метка unix, по которой был выполнен запрос), тогда для вашего скрипта ваш запрос MySQL будет выглядеть примерно так:
SELECT * FROM `recent_searches` ORDER BY `timestamp` DESC LIMIT 0, 5
Это должно вернуть 5 самых последних запросов, причем самый последний появляется первым.
Ответ №3:
Создайте таблицу (с чем-то похожим на latest_searches
) с полями query
, searched_count
, results_count
.
Затем после каждого поиска (если results_count>0) проверяйте, существует ли этот поисковый запрос в этой таблице. И обновлять или вставлять новую строку в таблицу.
И на какой-нибудь странице вы можете просто использовать данные из этой таблицы.
Это довольно просто.
Ответ №4:
Хорошо, ваш вопрос еще не ясен. Но я предполагаю, что вы имеете в виду, что хотите сначала прочитать последние результаты.
Для достижения этого выполните следующие действия:
-
При сохранении результатов используйте дополнительное поле для хранения даты И времени. Итак, ваш запрос insert будет выглядеть следующим образом:
Вставить в таблицу (searchItem, Когда) значения ($ strSearchItem, Now())
-
При извлечении убедитесь, что вы указали порядок, подобный этому:
Выберите * из таблицы Order by When Desc
Я надеюсь, что это то, что вы хотели сделать 🙂
Ответ №5:
Вы просто сохраняете ссылку и название ссылки / поиска в MySQL, а затем добавляете временную метку, чтобы записать, в какое время sb искал их. Затем вы извлекаете их из базы данных, упорядоченной по метке времени, и отображаете их на веб-сайте с помощью PHP.
- Создайте таблицу с тремя строками: временная метка ссылки поиска.
- Затем напишите PHP-скрипт для вставки строк при необходимости (это делается, когда пользователь действительно выполняет поиск)
- Ваша главная страница, на которой вы хотите, чтобы отображались данные, просто извлекает данные обратно и помещает их в контейнер ссылок $nameOfWebsite
- Вероятно, лучше всего использовать цикл for / while для выполнения шага 3
- Вы могли бы дополнительно добавить sth в виде счетчика, чтобы знать, какие запросы являются наиболее популярными / это было бы другое поле в MySQL, и вы просто продолжаете обновлять его (увеличивая на единицу, но ограничиваясь IP)