Topic: Paieska visoje lenteleje

Sweiki turiu pvz lentele bendravimas, toje lenteleje yra yra tokie stulpeliai: nickas, data, zinute, statusas,nario info. Gal kas galetu padet kaip padaryti paieska kad ivedus pvz.: labas ka veiki. , ieskoma butu rezultatu kurie atitiktu bent viena is tu triju zodziu(labas ka veiki). Is anksto dekuj

Re: Paieska visoje lenteleje

La,

O nori, kad būtų ieškoma kažkokiame viename stulpelyje ar visuose?

Re: Paieska visoje lenteleje

noriu kad butu ieskoma visose stulpeliuose. (Su vienu zodziu kaip padaryt tai viskas aisku, o jei ju yra daugiau tai nezinau)

Re: Paieska visoje lenteleje

Vienas būdas yra toks: ieškomą frazę skaidai į atskirus žodžius (kitaip sakant padarai žodžių masyvą), tada gamini užklausą:

SELECT *
FROM lentele
WHERE stulpelis1 = 'zodis1'
  OR stulpelis1 = 'zodis2'
  OR stulpelis1 = 'zodis3'
  OR stulpelis2 = 'zodis1'
  OR stulpelis2 = 'zodis2'
  OR stulpelis2 = 'zodis3'

Tai aišku nėra labai efektyvu, bet turint nedaug stulpelių ir mažai paieškomų žodžiu pakankamai aišku ir lengva įgyvendinti ;)

Teisingesnis būdas būtų sukurti FULLTEXT indeksą visiem stulpeliam ir tada ieškoti tame indekse:

SELECT *
FROM lentele
WHERE MATCH (stulpelis1, stulpelis2, stulpelis2) AGAINST ('zodis1', 'zodis2', 'zodis3')

Re: Paieska visoje lenteleje

o fulltext index'us visos mysql versijos palaiko?

Re: Paieska visoje lenteleje

kodel kai bandau sudet fulltext indexus ismeta tokia klaida?
#1214 - The used table type doesn't support FULLTEXT indexes

Re: Paieska visoje lenteleje

FULLTEXT indeksą palaiko MySQL nuo 3.23.23 versijos.

FULLTEXT indeksas veikia tik naudojant MYISAM variklį ir tik CHAR, VARCHAR, arba TEXT stulpeliams.

Yra daugiau apribojimų ir niuansų ;)

Parodyk, kaip atrodo tavo lentelė (SHOW CREATE lentele).

Re: Paieska visoje lenteleje

Wa jau veikia... :D Tik ant WAMP serverio neina fulltext index'u det... O normaliose hostose viskas o.k ;)
O zodzius gautus is inputu su glob paimu i masyva, o kaip toliau tuos zodzius i ta uzklausa iterpt? :/
...AGAINST ('zodis1', 'zodis2', 'zodis3');

Re: Paieska visoje lenteleje

Na tai tikriausiai su PHP pagalba:

$sakinys = "vienas du trys";
$query = ".. AGAINST ('" . implode("','", explode(" ", $sakinys)) . "')";

Re: Paieska visoje lenteleje

$sakinys = "vienas du trys";

$q="SELECT * FROM kita WHERE MATCH (' pavadinimas' , 'aprasymas')
AGAINST ('" . implode(" ',' ", explode(" ", $sakinys)) ."')";

$result=mysql_fetch_array(mysql_query($q)) or die (mysql_error());

Kas blogai? ismeta



Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /fpgs/fpgshttpd/wap/a/get.php on line 12
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' pavadinimas' , 'aprasymas') AGAINST ('vienas ',' du ',' trys')' at line 1

Re: Paieska visoje lenteleje

Stulpelio pavadinime yra nereikalingas tarpas.

Re: Paieska visoje lenteleje

pataisiau dbr ismete toki error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /fpgs/fpgshttpd/wap/a/get.php on line 12
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' du ',' trys')' at line 2

Re: Paieska visoje lenteleje

Neteisingai nukopijavai mano duotą pavyzdį su implode(), ten pridėjai per daug tarpų.

Re: Paieska visoje lenteleje

O dbr? vistiek blogai :(

$q="SELECT * FROM kita WHERE match (pavadinimas,aprasymas)  AGAINST ('" . implode("','", explode(" ", $sakinys)) . "')";

Re: Paieska visoje lenteleje

O kokia dabar klaida?
Dar jeigu pas tave yra įvedama daugiau nei vienas tarpas tai turi kažkaip irgi spręsti tą dalyką: tarkim palikti tik po vieną tarpą eilučių apdorojimo funkcijų pagalba: http://www.php.net/manual/en/ref.strings.php

Re: Paieska visoje lenteleje

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''du','trys')' at line 1

Re: Paieska visoje lenteleje

paradyk:

echo $q;

ir parodyk rezultatą.

Re: Paieska visoje lenteleje

SELECT * FROM kita WHERE match (pavadinimas,aprasymas) AGAINST ('vienas','du','trys')

Re: Paieska visoje lenteleje

Persiprašau ;) paieškos sakinio skaidyt nereikėjo, užtenka paiešką atlikti taip:

SELECT * FROM kita WHERE match (pavadinimas,aprasymas) AGAINST ('vienas du trys')

Kitaip sakant gali naudoti tokią PHP eilutę:

$q="SELECT * FROM kita WHERE match (pavadinimas,aprasymas)  AGAINST ('" . $sakinys . "')";

Aišku reikia nepamiršti, kad paieška neveiks tiem žodžiam, kurie atitiks daugiau nei 50% rezultatų, ir kurie yra "stop words" sąraše. Taip pat yra tam tikrų niuansų su lietuviškom raidėm, kurie buvo aptarti vienoje iš šio forumo temų ;)

20 (edited by mobilus 2006-08-25 14:43:03)

Re: Paieska visoje lenteleje

Veikia pagaliau ;) Dekuj labai :DDDDDDDDDDDDDDDD