Подобни но exact резултати

stoqnski

Registered
Входни данни:
Пешо мастиката
пешо мастиката
Пешо Мастиката
ПЕШО МАСТИКАТА

искам да съвпадат с резултат 'Пешо мастиката'

Логика:

PHP:
$Uppercase= mb_strtoupper($_GET['answer']);
$Lowercase=mb_strtolower($_GET['answer']); 
$query = заявка("SELECT * FROM text WHERE id=:id AND title=:uppercase OR title=:tolower ");
$query->bindValue(':uppercase', $Uppercase);
$query->bindValue(':tolower',$Lowercase);
$query->bindValue(':id', $id);
Цел:
Независимо ако входните данни са с главни или малки букви искам да съвпадат с точния резултат .

Въпрос:
Това ли е практиката или има по-удобен вариант ?
 
Значи искаш, да търси за точно това изречение, но независимо дали буквите са големи или малки ?

Погледни FULL-TEXT SEARCH https://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html
Прави точно това, което искаш.
 
Да , като цяло много се надявам да има някаква функция за mysql-a .
Ама нещо не мога да се ориентирам с тоя match и against
 
В MATCH() подаваш колоната, в която да търси, а в AGAINST() подаваш изречението. Виж примерите как са и прочети добре документацията в линка.
 
Или аз нещо не разбирам примера или нещо има генерално объркано. Mysql не е чувствителен към регистъра, освен ако изрично не си оказал това.
Какъв тип е колината "title", енкодинг ? колация ?
Поздрави.
 
Здравей.
Не се стискай пусни цялата дефиниция на таблицата :)
Принципно "_ci" ще рече case insensitive и би трябвало да търси правилно.
Пробва ли да пуснеш заявката примерно в phpMyAdmin ?
Сложи едно "SET NAMES 'utf8'" веднага след свързването към базата.
За съжаление с толкова информация мога само да гадая.
Поздрави.
 
Добре ето малко по-подробно :

$answer = "Пешо мастиката";
$Uppercase= mb_strtoupper($answer);
$Lowercase=mb_strtolower($answer);

Резултат :

$answer = "Пешо мастиката";
$Uppercase = "ПЕШО МАСТИКАТА";
$Lowercase = "пешо мастиката";

В Базата данни имам запис с име "Пешо мастиката" .
Да кажем имам заявка SELECT * FROM table WHERE title='$answer'
Това ще върне записа "Пешо мастиката".
Но искам да връща същият резултат ако му подавам и :
ПЕШО МАСТИКАТА и пешо мастиката .

Надявам се да е станало по-ясно .
 
Здравей,
на теория не би трябвало да имаш проблеми да търсиш само по

[sql]SELECT * FROM table WHERE title='$answer' [/sql]

Не каза какво става, като изпълниш заявката в phpMyAdmin. От този опит може да се каже къде точно е проблемът - дали в твоят скрипт или грешно настроен mysql сървър или връзка към него.

Не показа и цялата структура на таблицата. Примерно полето "titile" е възможно да е с различна колация от това на цялата таблица. От това което си написал е ясно, че "нещо" ползва "utf8_general_ci" кое точно? таблица, поле и двете ?

Някакви промени на "обкражението" ("SET НЕЩО–СИ") правени ли са?
Примерно както писах по-горе "SET NAMES utf8" ?
Поздрави.
 
stoqnski каза:
Добре ето малко по-подробно :

$answer = "Пешо мастиката";
$Uppercase= mb_strtoupper($answer);
$Lowercase=mb_strtolower($answer);

Резултат :

$answer = "Пешо мастиката";
$Uppercase = "ПЕШО МАСТИКАТА";
$Lowercase = "пешо мастиката";

В Базата данни имам запис с име "Пешо мастиката" .
Да кажем имам заявка SELECT * FROM table WHERE title='$answer'
Това ще върне записа "Пешо мастиката".
Но искам да връща същият резултат ако му подавам и :
ПЕШО МАСТИКАТА и пешо мастиката .

Надявам се да е станало по-ясно .

LIKE оператора няма ли да ти свърши работа
[sql]
SELECT * FROM table where title LIKE %$title%
[/sql]

:idea: :idea:
 
Това няма ли да ти свърши работа ?

[sql]
SELECT * FROM some_table WHERE MATCH(title) AGAINST('"пешо мастиката"' IN BOOLEAN MODE)
[/sql]

Като на title трябва да сложиш индекс FULLTEXT.
 
mapka7a каза:
stoqnski каза:
Добре ето малко по-подробно :

$answer = "Пешо мастиката";
$Uppercase= mb_strtoupper($answer);
$Lowercase=mb_strtolower($answer);

Резултат :

$answer = "Пешо мастиката";
$Uppercase = "ПЕШО МАСТИКАТА";
$Lowercase = "пешо мастиката";

В Базата данни имам запис с име "Пешо мастиката" .
Да кажем имам заявка SELECT * FROM table WHERE title='$answer'
Това ще върне записа "Пешо мастиката".
Но искам да връща същият резултат ако му подавам и :
ПЕШО МАСТИКАТА и пешо мастиката .

Надявам се да е станало по-ясно .

LIKE оператора няма ли да ти свърши работа
[sql]
SELECT * FROM table where title LIKE %$title%
[/sql]

:idea: :idea:

Ако имам "текстпешомастикатаблябля"
ше изведе записа .. не е оферта
Пичове страшно мн работа имам , тези дни ще гледам да ви отговоря .
 

Горе