Модератор
Юрій
(@yube)
Извините, не понял Вашего вопроса, но $title — это обычная строка
Полный запрос к БД выглядит так
"SELECT ID, post_title, post_type FROM tv_posts WHERE post_title LIKE 'Workin Moms' AND post_type= 'post'"
-
Ответ изменён 6 лет, 11 месяцев назад пользователем rogodessa.
-
Ответ изменён 6 лет, 11 месяцев назад пользователем rogodessa.
Модератор
Юрій
(@yube)
но $title — это обычная строка
Нет, это переменная. Если Вы не видите разницы между переменной и ее значением, то извините, что пытался помочь. Больше не буду.
Читая документацию по 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 лет, 11 месяцев назад пользователем rogodessa.
А зачем вы вообще лезете в базу руками? Используйте АПИ ВП.
FROM ".$wpdb->posts."
Да ладно!
Нет, это переменная. Если Вы не видите разницы между переменной и ее значением, то извините, что пытался помочь. Больше не буду.
Юрий, я прекрасно понимаю что такое переменная и что значит ее значение. Я не понял Ваш вопрос «Как формируется переменная». И в ответе на вопрос я дал ответ готового запроса к БД возвращенного через var_dump, который содержит в себе значение переменной $title и этим значением является обычная текстовая строка строка. Т.е. этим я вам показал, что именно передается в переменной. Что я не так сделал, что заслужил Ваш сарказм?
Модератор
Юрій
(@yube)
Хорошо, спрошу по-другому. Как ‘Workin Moms’ попадает в переменную $title?
Если Вы прямо присваиваете $title = 'working moms'
, то ясно как божий день, что оно не совпадает с «Workin’ Moms». Если же значение $title как-то формируется из «Workin’ Moms», то как? И еще дал ссылку на то, как в WP правильно формировать строки для запросов LIKE.
Вы совершенно правы — они не совпадают. И в этом вопрос.
Если $title присвоить $title = $wpdb->esc_like("workin' moms");
— т.е. с одинарной кавычкой, то соответственно поиск пройдет успешно
Но как найти ту же запись если $title присвоить $title = $wpdb->esc_like("workin moms");
— т.е. без одинарной кавычки
Вопрос в том, можно ли как-то до сравнения строк функцией LIKE очистить post_title от содержащихся в нем кавычек, чтобы сравнить со строкой без кавычек?
В данный момент поиск решения нужен для произвольной задачи, но та же проблема есть и стандартном поиске. Дело в том что это частая практика англоязычных пользователей — вбивать то или иное название (имя) сокращенно, опуская одинарную кавычку. Т.е. пользователь может в бить в поиск как «workin’ moms» так и «workin moms» и результат будет соответственно разным.
Модератор
Юрій
(@yube)
Вопрос в том, можно ли как-то до сравнения строк функцией LIKE очистить post_title от содержащихся в нем кавычек, чтобы сравнить со строкой без кавычек?
Можно. Но это будет серьезный тормоз. В дополнение к тормознутости самого LIKE с передним процентом.
Как-то так
... WHERE REPLACE(post_title, "'", "") LIKE '%". str_replace("'", "", $title) . "%' ...
Я бы попробовал с MATCH AGAINST, он работает гораздо быстрее.
p.s. С кавычками в примере сами разберетесь, я надеюсь 🙂
-
Ответ изменён 6 лет, 11 месяцев назад пользователем Юрій. Причина: p.s
Перед тем как обновить этот пост решение уже было найдено. Движение в строну REPLACE было верным, но не верно применял.
Но Вам огромное спасибо за помощь!
P/S/ Извините, может изначально не верно изложил задачу.