Jak optymalnie przeszukać jedną tabele w poszukiwaniu ciągu znaków? Chodzi mi tu nie tylko o jedno słowo, ale i kilka? Metoda %like% raczej odpada? Używam SQLite do połączenia z data base MySQL.
0
1
No i czemu like nie pasuje? Wiesz że warunki mozna ORować?
0
ORować, ale w jaki sposób masz na myśli? Bo chodzi mi o taki szukanie:
- szuka nawet do kilku słów,
- te słowa nie muszą być obok siebie,
- przeszukuje wszystkie kolumny po za id w jednej tabeli,
- zapytanie jest zaptymalizowane.
Na razie mam to:
$u->select("SELECT `opis` FROM `kwatery` WHERE `opis` LIKE '%$szukaj%'");
$u->select("SELECT `opis` FROM `kwatery` WHERE `opis` LIKE '%$szukaj%' OR `naglowek` LIKE '%$szukaj%'");
1
$szukaj_a = explode(' ', $szukaj);
if (count($szukaj_a)) {
$kolumny = array('opis', 'naglowek');
$warunki = array(); // to zostaw puste
foreach ($szukaj_a as $a) {
foreach ($kolumny as $k) {
$warunki[] = "`$k`LIKE '%$a%'";
}
}
$warunki_s = implode(' OR ', $warunki);
$u->select("SELECT `opis` FROM `kwatery` WHERE $warunki_s");
}
Jak nic nie walnąłem głupiego to będzie działać
0
ok, dodałem coś takiego:
for($i=0; $i < $ile; $i++) //3
{
$wynik[$i]['naglowek'];
$wynik[$i]['opis'];
for($j=0; $j < count($szukaj_a); $j++) //2
{
$wynik[$i]['naglowek'] = str_ireplace($szukaj_a[$j], '<font color="red"><b>' . $szukaj_a[$j] . '</b></font>', $wynik[$i]['naglowek']);
$wynik[$i]['opis'] = str_ireplace($szukaj_a[$j], '<font color="red"><b>' . $szukaj_a[$j] . '</b></font>', $wynik[$i]['opis']);
}
}
Wyglądać ładnie może nie wygląda, ale działa, później napiszę to ładnie.
Mam teraz takie pytanie:
Jak zrobić, żeby ładnie mi powycinało ilość słów z tekstu? Mam np opis na 100słów. I np 3 razy zapytanie znalazło pasujące słowo do szukanego w tym opisie. Jak ładnie teraz wyciąć z tych 100słów tylko te które nas interesują? jak one są np porozrzucane wszędzie ? :/