Помощник
|
Помощь по MySQL |
funkydance
|
Сообщение
#1
|
||
|
|
||
|
|||
kronos |
5.4.2015, 10:38;
Ответить: kronos
Сообщение
#2
|
|
Неправильно организована БД. Между метками и материалами должна быть связь многие ко многому с отдельной таблицей ID_МАТЕРИАЛА - ID_МЕТКИ.
И что вообще содержит $_SESSION[lin] в разных случаях? Судя по вашим словам, это и есть метки через запятую? Тогда естевственно они в запросе не найдут ничего, это будет как искать "яблоко,банан,абрикос" в других "банан,мандарин,яблоко" Если стукните в аську, разберусь. Сообщение отредактировал kronos - 5.4.2015, 10:39 -------------------- |
|
|
x64 |
5.4.2015, 11:02;
Ответить: x64
Сообщение
#3
|
|
Ни фига не понял, чего Вы хотите сделать.
LIKE — не регулярное выражение. Он ищет точное вхождение в строке (без учёта регистра, если не binary). Пусть имеется строка 'Яблоко, груша, мандарин'. Тогда: LIKE '%яблоко%', LIKE '%мандарин%' или LIKE '%груша%' найдётся. Но не найдётся (более того, не должно!) LIKE '%яблоко мандарин%', LIKE '%груша яблоко%' и т. п. Либо делайте двойной лайк на поле: metka LIKE '%яблоко%' AND metka LIKE '%груша%' -- либо OR, если достаточно что-то одно либо посмотрите в сторону полнотекстового поиска MATCH AGAINST (там есть неприятные ограничения на минимальную длину слова), либо регулярки, либо sphinx копайте. Можете что-то своё придумать, например, хранить слова в отдельной таблице, с помощью другой привязывать их к записям. PS: и причём здесь Помощь по PHP? Это MySQL. |
|
|
funkydance
|
Сообщение
#4
|
|
И что вообще содержит $_SESSION[lin] в разных случаях? Судя по вашим словам, это и есть метки через запятую? Да, это метки через запятую. x64, Двойной LIKE тоже не помогает. Если у материала несколько тегов и они перечисляются через запятую, то LIKE берёт слово с запятой. Если у материала один тег без запятых, тогда всё нормально. Уф, уже голова кипит. Про регулярки прочитал, толком ничего не понял, ща не в состояние всё понять сразу, только учусь. |
|
|
x64 |
5.4.2015, 18:48;
Ответить: x64
Сообщение
#5
|
|
funkydance, для чего именно не помогает? Вам нужно одновременное срабатывание двух LIKE (условие по AND), либо по условию «один из» (условие по OR)?
В любом случае, ВЫ должны предварительно разбить запрашиваемые сравнения и каждому из них добавить в LIKE '%ключ%'. Не забывайте про необходимость экранирования значений, приходящих от пользователя, с помощью вызова функции mysql_real_escape_string(). Если у материала несколько тегов и они перечисляются через запятую, то LIKE берёт слово с запятой. 1. Что конкретно нужно? Если пользователь ищет одновременно по виноград/мандарин/яблоко, должны выводить только поля, содержащие через запятую эти слова в строгом соответствии, или как? Если первое, самостоятельно позаботтесь об упорядочивании в определённом порядке. 2. Программист должен позаботиться о подготовке конкретных значений. Если пользователь запрашивает мандарин и яблоко, вы должны самостоятельно сформировать: Код `field` LIKE '%яблоко%' OR `field` LIKE '%мандарин%' для выбора полей, где есть либо одно, либо другое (или оба сразу). Да, это метки через запятую. Код $labels = explode(',', $_SESSION[lin]); # получим метки в массив
# пробежаться по меткам... foreach ($labels as $k => $v) { # ...и подготовить каждую к запросу $labels[$k] = "`field` LIKE '%' . mysql_real_escape_string(trim($v)) . '%'"; } # составить запрос вида «одно совпадение из нескольких» $query = 'SELECT * FROM `table` WHERE ' . implode(' OR ', $labels); |
|
|
kronos |
5.4.2015, 18:51;
Ответить: kronos
Сообщение
#6
|
|
|
добавлю к x64, на PHP это делается через функцию explode и дальнейший цикл foreach, где на каждое значение будет добавляться к запросу
Цитата `field` LIKE '%яблоко%' с OR разделением ---- опоздал
Сообщение отредактировал kronos - 5.4.2015, 18:51 -------------------- |
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Требуется помощь по сайту на "ВордПресс" Закрылся доступ в панель администратора |
15 | Tia2 | 2364 | 17.4.2024, 0:54 автор: diviner99 |
|
Состояние после ампутации - нужна помощь благотворительный топик |
49 | vitvirtual | 5893 | 1.4.2024, 5:23 автор: vitvirtual |
|
требуется помощь с themasoftware (Темапостером) | 0 | Taylor | 627 | 16.3.2024, 18:41 автор: Taylor |
|
Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery Разработка сайтов и сервисов под-ключ |
0 | alexey | 1243 | 24.11.2023, 14:46 автор: alexey |
|
Нужна помощь download traffic |
7 | Adblock_Affilate | 1440 | 4.5.2023, 22:01 автор: kuprum |
Текстовая версия | Сейчас: 23.4.2024, 16:21 |