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

Тема в разделе "PHP", создана пользователем QuZ, 28 янв 2012.

Модераторы: latteo
  1. QuZ

    QuZ Постоялец

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

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

    Пробывал запросами Like для каждого назначенного мной тега для поиска, но как-то очень долго идет обработка.. Что-то около 1 000 строк для одного тега за 5-ть минут. Имея 10-ток тегов, получаем 2-3м запросов чисто на селект и столько-же на инсерты..
    Спасибо заранее за идеи.
     
  2. vlad_v

    vlad_v

    Регистр.:
    30 июн 2006
    Сообщения:
    444
    Симпатии:
    67
    делаешь выборку из базы. в цикле через пхп делаешь поиск тега в строке через strpos , какой тег нашло - тот и присваиваешь.
     
  3. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Спасибо. Попробую сделать так. Скорее всего, да, быстрее будет, чем через mysql LIKE.
     
  4. d1mka

    d1mka Постоялец

    Регистр.:
    20 мар 2007
    Сообщения:
    92
    Симпатии:
    23
    Помойму обработка PHP все равно дольше будет, а вы не пробовали по полю тег индекс создать
     
  5. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    в кроне поставить и пусть частями обрабатывает по тихоньку:) Т.е как уже говорили делать выборку новости и к ней присваивать теги. а чтобы быстрее по базе искало нужно индекс FULLTEXT поставить и делать полнотекстовый поиск.
     
  6. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Мне надо за ночь успевать обработать по-новой весь имеющийся материал.. Там не только данное действие.. По сути из 8-ми часов 4-ре уж съедено. Пытался делать через массив и поиск по словам сразу в строчке выборки, но пока получил пока проблему, которая, наверное отложит данный способ. При нахождении в строке выборки 2-х тегов и более - он создает для этой строчки новы массив для каждого тега. (Метод аналогичный совету vlad_v)
    Не совсем понял Вашу идею.
     
  7. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Если я верно понял задачу...
    Не самое лучшее решение. В этом случае у вас на каждую сущность приходится только один тег (отношение один-к-одному).
    Если вы захотите к примеру добавить тег "хлеб" к сущности "Батон нарезной" - придётся или заменять тег или переделывать структуру.
    Лучше сделать таблицу-связку с отношением многие-ко-многим с полями ID_сущности ID_тега.
    Тогда при создании сущности нужно будет выбрать все подходящие теги и записать их связь с сущностью в таблицу-связку, а выборку проводить уже по этой таблице-связке по ID сущности или ID тега исходя из требуемой выборки.

    Если структуру менять не дано, то проверьте прописаны ли индексы для полей по которым выбираете.
    Желательно бы ещё увидеть и код, которым выбираете (включая SQL-запросы).
    И помните при выборке LIKE если % впереди поисковой строки - индексы не используются.
     
  8. diden05

    diden05 Создатель

    Регистр.:
    20 окт 2009
    Сообщения:
    13
    Симпатии:
    4
    Две связанные таблицы, м:м, теги задавать на этапе добавления элемента в таблицу с батонами, индексы по id. Будет шустро.