Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Поиск по MySQL целых лексем, разделенных символом.  (Прочитано 1028 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн denfox

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
В названии темы может напутал с терминологией.

Попытаюсь объяснить задачу.

Сейчас есть поиск по таблице, реализован вот так:

SELECT name FROM table11 WHERE UPPER(tags) LIKE '%".strtoupper($_POST['feellike'])."%'"  запрос поиска передается с другой страницы методом POST
Далее объясняю:
В таблице два столбца: Тэги и имя. По тегам нужно найти имя. Далее рассматриваем только столбец с тегами.
Допустим есть две строки в этом столбце. Заполнены вот так:

Цитировать
СТРОКА 1 [один, два, третий тег]
СТРОКА 2 [первый тег, два, три]
При поиске запросом, описанном выше мы получим
1) Если ввести "один" или "три" - получим первую или вторую строку (первую если "один", вторую если "три")
2) Если ввести "первый тег" - получим вторую строку. Если "Третий тег" - получим первую.
3) Вот тут-то вся проблема. Если ввести слово "тег" в поиск, то выведуться обе строки. А так быть не должно.

Не знаю как это описать.
Просто нужно разделять теги не пробелом, а каким-то другим символом (в данном примере запятой).
Так чтобы "Первый тег" не равнялось двум тегам "Первый" и "тег". А чтобы это был именно "первый тег", и никак иначе.
При поиске по слову "тег", в таком случае не находилось бы ничего.

Надеюсь объяснил более-менее понятно.. извиняюсь если чего-то напутал и накрутил.
Помогите такое реализовать, буду очень благодарен.

Оффлайн gva230

  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Дёшево и сердито :)
SELECT name FROM table11 WHERE UPPER(tags) LIKE '%, ".strtoupper($_POST['feellike']).",%'"
Kubuntu - наше фсё! :Ь

Оффлайн denfox

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Отлично, спасибо :)
Вопрос, очевидно, был даже глупым..

Оффлайн gva230

  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Отлично, спасибо :)
Вопрос, очевидно, был даже глупым..
Нет, ну что вы, просто решение было гениальным. :)

P.S. В решении найден баг!!! Оно не должно выдать первый и последний результаты при совпадении.
P.P.S. Для бага найдено решение!!! :) Строку нужно формировать начиная с запятой и пробела и заканчивая запятой. :)

P.P.P.S. Хотелось бы увидеть альтернативные решения для задачи топикстартера.
« Последнее редактирование: 26 Февраля 2013, 19:37:46 от gva230 »
Kubuntu - наше фсё! :Ь

Оффлайн denfox

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Этот самый баг был вычислен сразу, и сразу же был сделан фикс Вашим-же методом  ;D
Как решение вполне подойдет, но тоже будет интересно услышать альтернативные решения.

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
Код: (SQL) [Выделить]
SELECT name FROM table11 WHERE tags REGEXP ", тег,|^тег,|, тег$"ход мысли понятен? :)

 

Страница сгенерирована за 0.118 секунд. Запросов: 25.