Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka, projekt
Forum PHP.pl > Forum > PHP
biedak
Cześć,

chcę zrobić prostą wyszukiwarkę - chodzi o wyświetlanie wyników wraz z kilkunastoma słowami oplatającymi wyszukiwane słowo.
W jaki sposób po wyszukaniu najlepiej pobrać te słowa oplatające wyszukiwaną frazę, tak jak np. w Google.

Myślałem jakoś, że pobiera cały tekst, a potem go jakoś okraja, ale lepiej żeby mysql pobierał tylko ten niewielki fragment, który jest potrzebny.
Fifi209
Mam lodówkę, patelnię, kuchenkę, mogę ugotować rolady z kluskami i kapustą?

Jednym słowem, nie napisałeś nawet gdzie i w jaki sposób przetrzymujesz dane.
biedak
W mysql. Są pola treść ze dłuższymi tekstami, chce wyciągać fragmenty - tytuł wraz z frazą i otaczającym tekstem.
kill15
pokaż co już zrobiłeś wgl snitch.gif jakieś próby snitch.gif
biedak
  1. $ileNewsow = $this->db->fetch("SELECT count(*) FROM newsy WHERE tresc LIKE '%$this->szukaj%' OR tresc_dl LIKE '%$this->szukaj%'");
  2. if($ileNewsow['0'] > 0)
  3. {
  4. $limit2 = $this->limit();
  5. $limit1 = $limit2 - $this->podzial;
  6.  
  7. $pobierzNewsy = $this->db->fetchAs("SELECT id, tytul FROM newsy WHERE tresc LIKE '%$this->szukaj%' OR tresc_dl LIKE '%$this->szukaj%' ORDER BY id DESC LIMIT ".$limit1.", ".$limit2."");
  8. if($ileNewsow['0']<$this->podzial){
  9. $petla=$ileNewsow['0'];
  10. } else {
  11. $petla = $this->podzial;
  12. }
  13. for ($i=0;$i<$petla;$i++)
  14. {
  15. $pobierzNewsy[$i]['link'] = ogonki($pobierzNewsy[$i]['tytul']);
  16. }
  17. $this->view->assign('dane', $pobierzNewsy);
  18. $this->view->assign('znaleziono', $ileNewsow['0']);
  19. $this->view->display('news.tpl');
  20. $this->nawigacja($this->strona_aktualna,$this->podzial,$ileNewsow['0']);
  21. }


Jak już wspomniałem chodzi mi teraz, żeby oprócz samych linków, był wklejony kawałek tekstu z wyszukiwanym słowem.

Czyli, np: wyszukując Thembu w tekście
Cytat
Mandela jest synem wodza plemienia Thembu. W wieku 7 lat, jako pierwszy w swojej rodzinie zaczął uczęszczać do szkoły. Tam nauczyciel-metodysta nadał mu angielskie imię Nelson. Ukończył studia prawnicze. Jako student uczestniczył w działaniach na rzecz praw politycznych, społecznych i ekonomicznych czarnoskórej większości w RPA. W 1942 roku wstąpił do Afrykańskiego Kongresu Narodowego (ANC), a w 1950 roku zaczął nim kierować. Wikipedia


pojawia się

Cytat
Nelson Mandela
Mandela jest synem wodza plemienia Thembu. W wieku 7 lat, jako pierwszy w swojej rodzinie zaczął...


W jaki sposób pobrać tak skrócony tekst z Mysql lub jak go skrócić po pobraniu w PHP wskazując określone słowo kluczowe?
kadlub
  1. SELECT SUBSTR(tytul,LOCATE('słowo_klucz',tytul)-10 ,40)AS gotowe FROM newsy

to zapytanie wyświetli ci fragment tekstuz 10 znakami przed słowem kluczowym (które podasz do zapytania) i 40 znakami po słowie kluczowym
jak chcesz inaczej np od 1 znaku w tekście do 40 po wystąpieniu słowa kluczowego to daj
  1. SELECT SUBSTR(tytul,1,LOCATE('słowo_klucz',tytul)+40)AS gotowe FROM newsy

dopasuj sobie według uznania
biedak
Działa, tylko teraz okazuje się, że mam w dwóch polach tekst, w którym wyszukuję. Muszę ten tekst najpierw połączyć i dopiero potem w nim wyszukać:
Łącze:
  1. SELECT CONCAT(tresc, ' ', tresc_dalsza) AS tekst FROM newsy WHERE ID = $pobierzNewsy[$i]['id']


Próbuje:
  1. SELECT SUBSTR((SELECT CONCAT(tresc, ' ', tresc_dalsza) AS tekst FROM newsy WHERE ID = $pobierzNewsy[$i]['id']),LOCATE('%$this->szukaj%',(SELECT CONCAT(tresc, ' ', tresc_dalsza) AS tekst FROM newsy WHERE ID = $pobierzNewsy[$i]['id']))-15,15) AS gotowe FROM newsy WHERE ID = $pobierzNewsy[$i]['id']


Niby działa, ale chyba jakoś źle. Czy jest inny sposób?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.