Autor Zpráva
Jehla
Profil
Zdravím,

asi to bude maličkost ale já si stím nějak moc lámu hlavu. Mám dotaz:

SELECT id, kod, nazev, popis, cena, dph,datum, .... 
FROM zbozi 
WHERE (MATCH(nazev,popis,kod) AGAINST('*$hledej*' IN BOOLEAN MODE))
ORDER BY datum asc


Toto funguje ve většině případech správně, jenže nastane problém, když se v řetězci $hledej vyskytne tečka (např: *prvni.druha*). Databáze to pak hledá jako dvě slova. Skoušel jsem dat před tečku aji lomítko. Ale stejně mě to db bere jako kdyby to vypadalo *prvni**druha* (takže mě db vrátí všechny výsledky které obsahují prvni, nebo druhá), ty hvězdičky tam potřebuji, protože když se bude hledat například ve sloupci kod, tak tam jsou docela složitý řetězce, takže by to spousta lidí nemusela zadávat celé, proto tam nemůžu mít uvozovky (stěma to funguje správně, ale musím ty slova zadat celé).

Nevím jestli je to srozumitelné, tak dám přesný příklad.

Zákazník chce vyhledat číslo zboží, které je Z25800.07. Jenže když zadá přesně tento výraz tak mu db vrátí vše co obsahuje Z25800 nebo 07. Což je zbytečné, potřebuji aby mu to vrátilo pouze přesný výsledek. Ale také potřebuji aby mu to vrátilo když zadá jen Z25800.0 (nekompletní řetězec, třeba bez začátku nebo bez konce), takže do uvozovek se to také dat nemůže.

Snad je to srozumitelné, za jakoukoliv radu budu vděčný
fos4
Profil
Pouziva se zpetne lomitko, tedy "\"
Takze:
SELECT id, kod, nazev, popis, cena, dph,datum, .... 
FROM zbozi 
WHERE (MATCH(nazev,popis,kod) AGAINST('*".str_replace(".", "\\.", $hledej)."*' IN BOOLEAN MODE))
ORDER BY datum asc


Pak jsem nekde cetl ze se i tyto divoke znaky davaji do hranatych zavorek, ale bylo to uz dlouho a kdo vi jestli vubec mysql
Jehla
Profil
Děkuji za reakci, ale zkoušel jsem to. A toto funguje pořád stejně, jak kdybych tam ty lomítka nedal :-(
Kajman_
Profil *
Myslím, že hvězdička může být stejně jenom na konci. Můžete použít like, ale rychlé to nebude.
Jehla
Profil
Tak jsem to asi vyřešil. Na podnět toho že hvězdička může být jen na konci, jsem to vyzkoušel zadat jako '+prvni.druha*' a už to funguje částečně podle představ :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: