Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Wyszukiwanie
--Dawid--
post 21.03.2014, 12:32:22
Post #1





Goście







Witam
  1. $stmt = $pdo -> prepare('SELECT username, email, rlname, lastname, website, gg, skype, bio FROM `'.$prefix_mysql.users.'` WHERE
  2. `username` LIKE :slowo
  3. OR `email` LIKE :slowo
  4. OR `rlname` LIKE :slowo
  5. OR `lastname` LIKE :slowo
  6. OR `website` LIKE :slowo
  7. OR `gg` LIKE :slowo
  8. OR `skype` LIKE :slowo
  9. OR `bio` LIKE :slowo');
  10. $stmt -> bindValue(':slowo', '%'.$slowo.'%', PDO::PARAM_STR);
  11. $stmt -> execute();
  12. while($row2 = $stmt -> fetch()){
  13. $users[] = $row2;
  14. }
  15.  
  16. $stmt = $pdo -> prepare('SELECT tags, topic, contents, author_id FROM `'.$prefix_mysql.news.'` WHERE
  17. `tags` LIKE :slowo
  18. OR `topic` LIKE :slowo
  19. OR `contents` LIKE :slowo');
  20. $stmt -> bindValue(':slowo', '%'.$slowo.'%', PDO::PARAM_STR);
  21. $stmt -> execute();
  22. while($row2 = $stmt -> fetch()){
  23. $news[] = $row2;
  24. }


Wyszukiwarka teoretycznie działa tak jak została do tego napisana.

Pytanie brzmi:
Jak mogę wyświetlić treść tylko danej kolumny w której znalazł się wyszukiwany wyraz? I go podświetlić +/- dwóch zdań?

1. Jak rozpoznać gdzie mi coś znalazło i to uciąć tak jak w innych wyszukiwarkach?


Nie proszę o gotowca a o naprowadzenie mnie. smile.gif


Dziękuje i pozdrawiam!
Go to the top of the page
+Quote Post
markuz
post 21.03.2014, 12:41:55
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Wyszukujesz pozycji szukanego słowa w tekście za pomocą strpos a potem wyświetlasz +- np. 10 znaków.
lub
Dzielisz tekst na wyrazy, szukasz szukanego słowa w tablicy wyrazów i wyświetlasz +- np. 5 słów. (explode, array_search).

Ten post edytował markuz 21.03.2014, 12:43:45


--------------------
Go to the top of the page
+Quote Post
--Dawid--
post 21.03.2014, 12:44:11
Post #3





Goście







Witam,

No tak ale jeśli mam tyle kolumn to muszę powielić zmienne z tą funkcją x razy?
Bo to tylko dwie tabele a chciałbym dodać jeszcze z 5 conajmiej więc chce to zrobić od razu jak najlepiej a nie najbardziej mulący skrypt.
Go to the top of the page
+Quote Post
YourFrog
post 21.03.2014, 13:28:25
Post #4





Grupa: Zarejestrowani
Postów: 124
Pomógł: 22
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


@Dawid
Zarejestruj się będzie ci łatwiej odpowiadać

@Topic
Wyszukiwarki tekstowe w aplikacjach nie są wcale rzeczą prostą. Rozwiązanie jakie dałeś powinno od razu polecieć do kosza na śmieci bo jest nie dość że nie wydajne to sprawia problemy takie jak np napisałeś. Oprzyj się o jakiś ciekawszy pomysł z internetu np. przechowywanie wyrazów w bazie danych i ich relacji z właściwymi tabelami.
Go to the top of the page
+Quote Post
--Dawid--
post 22.03.2014, 11:53:39
Post #5





Goście







Witam,

Szukam i szukam i w google same wyłapuje odpowiedzi typu LIKE lub WHERE.. A tym nieda się odnieść chyba większego sukcesu?
Głównie chodzi mi o te wyłapywanie tekstu i podświetlanie +/- dwóch zdań z danej kolumny. Kiedyś coś takiego udało mi się osiągnąć ale strasznie naokoło.
Go to the top of the page
+Quote Post
--Dawid--
post 22.03.2014, 13:28:11
Post #6





Goście







Witam,
przepraszam za double post.


Zrobiłem coś takiego:
  1. $stmt = $pdo -> prepare('SELECT tags, topic, contents, author_id FROM `'.$prefix_mysql.news.'` WHERE
  2. `tags` LIKE :slowo
  3. OR `topic` LIKE :slowo
  4. OR `contents` LIKE :slowo');
  5. $stmt -> bindValue(':slowo', '%'.$slowo.'%', PDO::PARAM_STR);
  6. $stmt -> execute();
  7. while($row2 = $stmt -> fetch()){
  8. $mystring = strip_tags($row2['contents']);
  9. $findme = $slowo;
  10.  
  11. $pos = strpos($mystring, $findme);
  12. if ($pos !== false) {
  13. if($pos <= $pokaz_wstecz){ $pos1 = 0; }else{
  14. $pos1 = $pos - $pokaz_wstecz;
  15. }
  16. $pos2 = $pos + $pokaz_dalej;
  17. $rest = substr($mystring, $pos1, $pos2);
  18. $zwroc = search_highlight($rest, $findme);
  19. } else {
  20. $zwroc = 1;
  21. }
  22. $news[] = array('contents' => $zwroc);
  23. }


Wiem że to nie jest doskonałe ale mniej więcej działa jak powinno. Lecz ma drugi minus. Muszę kod powielić x razy dla każdego pola w bazie osobno.
Wciąż szukam odpowiedniego rozwiązania.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 22:34