Поддержка Проблемы и решения Поиск по БД: LIKE и одинарная кавычка

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Модератор Yuri

    (@yube)

    Как формируется переменная $title?

    Рекомендую ознакомиться: https://developer.wordpress.org/reference/classes/wpdb/esc_like/

    Автор rogodessa

    (@rogodessa)

    Извините, не понял Вашего вопроса, но $title — это обычная строка

    Полный запрос к БД выглядит так

    "SELECT ID, post_title, post_type FROM tv_posts WHERE post_title LIKE 'Workin Moms' AND post_type= 'post'"

    • Ответ изменён 6 лет назад пользователем rogodessa.
    • Ответ изменён 6 лет назад пользователем rogodessa.
    Модератор Yuri

    (@yube)

    но $title — это обычная строка

    Нет, это переменная. Если Вы не видите разницы между переменной и ее значением, то извините, что пытался помочь. Больше не буду.

    Автор rogodessa

    (@rogodessa)

    Читая документацию по REPLACE() ( https://www.w3resource.com/mysql/string-functions/mysql-replace-function.php ) пытаюсь сделать так

    "SELECT ID, post_title, post_type, REPLACE(post_title, '\'', '') FROM tv_posts as p WHERE post_title LIKE 'Workin Moms' AND post_type = 'post'"

    Но тоже не дает результата.

    • Ответ изменён 6 лет назад пользователем rogodessa.

    А зачем вы вообще лезете в базу руками? Используйте АПИ ВП.

    FROM ".$wpdb->posts."

    Да ладно!

    Автор rogodessa

    (@rogodessa)

    Нет, это переменная. Если Вы не видите разницы между переменной и ее значением, то извините, что пытался помочь. Больше не буду.

    Юрий, я прекрасно понимаю что такое переменная и что значит ее значение. Я не понял Ваш вопрос «Как формируется переменная». И в ответе на вопрос я дал ответ готового запроса к БД возвращенного через var_dump, который содержит в себе значение переменной $title и этим значением является обычная текстовая строка строка. Т.е. этим я вам показал, что именно передается в переменной. Что я не так сделал, что заслужил Ваш сарказм?

    Модератор Yuri

    (@yube)

    Хорошо, спрошу по-другому. Как ‘Workin Moms’ попадает в переменную $title?
    Если Вы прямо присваиваете $title = 'working moms', то ясно как божий день, что оно не совпадает с «Workin’ Moms». Если же значение $title как-то формируется из «Workin’ Moms», то как? И еще дал ссылку на то, как в WP правильно формировать строки для запросов LIKE.

    Автор rogodessa

    (@rogodessa)

    Вы совершенно правы — они не совпадают. И в этом вопрос.

    Если $title присвоить $title = $wpdb->esc_like("workin' moms"); — т.е. с одинарной кавычкой, то соответственно поиск пройдет успешно

    Но как найти ту же запись если $title присвоить $title = $wpdb->esc_like("workin moms"); — т.е. без одинарной кавычки

    Вопрос в том, можно ли как-то до сравнения строк функцией LIKE очистить post_title от содержащихся в нем кавычек, чтобы сравнить со строкой без кавычек?

    В данный момент поиск решения нужен для произвольной задачи, но та же проблема есть и стандартном поиске. Дело в том что это частая практика англоязычных пользователей — вбивать то или иное название (имя) сокращенно, опуская одинарную кавычку. Т.е. пользователь может в бить в поиск как «workin’ moms» так и «workin moms» и результат будет соответственно разным.

    Модератор Yuri

    (@yube)

    Вопрос в том, можно ли как-то до сравнения строк функцией LIKE очистить post_title от содержащихся в нем кавычек, чтобы сравнить со строкой без кавычек?

    Можно. Но это будет серьезный тормоз. В дополнение к тормознутости самого LIKE с передним процентом.
    Как-то так

    ... WHERE REPLACE(post_title, "'", "") LIKE '%". str_replace("'", "", $title) . "%' ...

    Я бы попробовал с MATCH AGAINST, он работает гораздо быстрее.

    p.s. С кавычками в примере сами разберетесь, я надеюсь 🙂

    • Ответ изменён 6 лет назад пользователем Yuri. Причина: p.s
    Автор rogodessa

    (@rogodessa)

    Перед тем как обновить этот пост решение уже было найдено. Движение в строну REPLACE было верным, но не верно применял.

    Но Вам огромное спасибо за помощь!

    P/S/ Извините, может изначально не верно изложил задачу.

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Поиск по БД: LIKE и одинарная кавычка» закрыта для новых ответов.