Создания тегов на основе базы mysql

QuZ

Постоялец
Регистрация
18 Июл 2009
Сообщения
86
Реакции
50
День добрый. Имеется база данных среднего размера ( 200-300 к строк)
Хотелось бы сделать присвоение тегов к описаниям.
Т.е. для примера
Батон нарезной
Батон подмосковный
Батон подмосковный с кусочками плавленного сыра
булочка с маком
булочка с сыром
булочка с джемом и сыром.
Я создал дополнительную колонку с названием tag
хочу php скриптом разбить описание на теги по заранее созданной базе тегов.
Для примера указываю тег
Батон
булочка
сыр
После прохождение обработчиком хотелось видеть что-то вроде такого:

Батон нарезной|Батон
Батон подмосковный|Батон
Батон подмосковный с кусочками плавленного сыра| Батон;сыр
булочка с маком|булочка
булочка с сыром|булочка
булочка с джемом и сыром|булочка;сыр

Пробывал запросами Like для каждого назначенного мной тега для поиска, но как-то очень долго идет обработка.. Что-то около 1 000 строк для одного тега за 5-ть минут. Имея 10-ток тегов, получаем 2-3м запросов чисто на селект и столько-же на инсерты..
Спасибо заранее за идеи.
 
делаешь выборку из базы. в цикле через пхп делаешь поиск тега в строке через strpos , какой тег нашло - тот и присваиваешь.
 
Спасибо. Попробую сделать так. Скорее всего, да, быстрее будет, чем через mysql LIKE.
 
Спасибо. Попробую сделать так. Скорее всего, да, быстрее будет, чем через mysql LIKE.
Помойму обработка PHP все равно дольше будет, а вы не пробовали по полю тег индекс создать
 
в кроне поставить и пусть частями обрабатывает по тихоньку:) Т.е как уже говорили делать выборку новости и к ней присваивать теги. а чтобы быстрее по базе искало нужно индекс FULLTEXT поставить и делать полнотекстовый поиск.
 
в кроне поставить и пусть частями обрабатывает по тихоньку:) Т.е как уже говорили делать выборку новости и к ней присваивать теги. а чтобы быстрее по базе искало нужно индекс FULLTEXT поставить и делать полнотекстовый поиск.
Мне надо за ночь успевать обработать по-новой весь имеющийся материал.. Там не только данное действие.. По сути из 8-ми часов 4-ре уж съедено. Пытался делать через массив и поиск по словам сразу в строчке выборки, но пока получил пока проблему, которая, наверное отложит данный способ. При нахождении в строке выборки 2-х тегов и более - он создает для этой строчки новы массив для каждого тега. (Метод аналогичный совету vlad_v)
Помойму обработка PHP все равно дольше будет, а вы не пробовали по полю тег индекс создать
Не совсем понял Вашу идею.
 
Если я верно понял задачу...
Я создал дополнительную колонку с названием tag
Не самое лучшее решение. В этом случае у вас на каждую сущность приходится только один тег (отношение один-к-одному).
Если вы захотите к примеру добавить тег "хлеб" к сущности "Батон нарезной" - придётся или заменять тег или переделывать структуру.
Лучше сделать таблицу-связку с отношением многие-ко-многим с полями ID_сущности ID_тега.
Тогда при создании сущности нужно будет выбрать все подходящие теги и записать их связь с сущностью в таблицу-связку, а выборку проводить уже по этой таблице-связке по ID сущности или ID тега исходя из требуемой выборки.

Если структуру менять не дано, то проверьте прописаны ли индексы для полей по которым выбираете.
Желательно бы ещё увидеть и код, которым выбираете (включая SQL-запросы).
И помните при выборке LIKE если % впереди поисковой строки - индексы не используются.
 
Две связанные таблицы, м:м, теги задавать на этапе добавления элемента в таблицу с батонами, индексы по id. Будет шустро.
 
Назад
Сверху