Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Podobne tytuły
Forum PHP.pl > Forum > Przedszkole
glacier
Witam,

Mam w bazie danych MySQL kilkaset artykułów. Chciałbym pod każdym artykułem umieścić linki do artykułów które mają podobny tytuł do obecnie wyświetlanego. Czy mogę liczyć na jakąś podpowiedź, czego się zaczepić, jakich funkcji użyć, może zapytania w mysql aby takie linki wygenerować?
Wykrywacz
Zacznij od Like %%

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
basstone
  1. $tytul_artykulu = "blebleble";
  2.  
  3. $zapytanie = "SELECT * FROM `artykuly` WHERE `tytul` LIKE '%$tytul_artykulu%'";
  4. $idzapytania = mysql_query($zapytanie);
  5.  
  6. while($wynik = mysql_fetch_row($idzapytania)) {
  7. // wyświetlasz to co chcesz :)
  8. }
Wykrywacz
Jak podajesz mu gotowca to przynajmniej wrzuć mu coś co będzie odporne na sqlinjection, bo wrzucanie początkującemu takich kaszalotów tylko sprawi mu problem w przyszłości.
glacier
Dziękuję za podpowiedzi. Oczywiście na początku zająłem się LIKE, ale podając w zapytaniu %tytul_artykułu% otrzymuje w wynikach tylko taki artykuł którego tytuł jest identyczny z obecnie wyświetlanym.
Ilware
Zainteresuj się funkcjami z MySql sounds-like oraz soundex
http://dev.mysql.com/doc/refman/5.0/en/str...unction_soundex
http://dev.mysql.com/doc/refman/5.0/en/str...tor_sounds-like
artuross
Może rozbij tytuł artykułu na części przy spacjach, dzięki temu każde słowo zostanie wyszukane osobno, następnie wyświetl wyżej te tytuły, które zawierały więcej wspólnych słów, np.

$artykul = "Jakiś artykuł o wszystkim i o niczym";

Teraz po rozbiciu otrzymujesz (wielkość liter nie powinna być brana pod uwagę): jakiś, artykuł, o, wszystkim, i, o, niczym.

Warto usunąć powtarzające się słowa/znaki, w tym przykładzie występuje akurat 2 razy o, które jest oczywiście nie potrzebne, ponieważ podwoiłoby ilość tych samych wyników nawet jeżeli miałyby tylko jedno o.

Kolejnym krokiem byłoby usunięcie pojedynczych znaków, spójnik i raczej nie zwiększa szans na znalezienie podobnego artykułu.

Teraz należy wyszukać w bazie danych wszystkie rekordy zawierające jakiś lub artykuł lub wszystkim lub niczym.

Należy wyszukać powtarzające się rekordy, następnie zliczyć ich ilość, porównać, usunąć powtarzające się, a następnie wyświetlić.
glacier
Cytat(artuross @ 11.01.2012, 19:28:11 ) *
Może rozbij tytuł artykułu na części przy spacjach, dzięki temu każde słowo zostanie wyszukane osobno, następnie wyświetl wyżej te tytuły, które zawierały więcej wspólnych słów, np.

$artykul = "Jakiś artykuł o wszystkim i o niczym";

Teraz po rozbiciu otrzymujesz (wielkość liter nie powinna być brana pod uwagę): jakiś, artykuł, o, wszystkim, i, o, niczym.

Warto usunąć powtarzające się słowa/znaki, w tym przykładzie występuje akurat 2 razy o, które jest oczywiście nie potrzebne, ponieważ podwoiłoby ilość tych samych wyników nawet jeżeli miałyby tylko jedno o.

Kolejnym krokiem byłoby usunięcie pojedynczych znaków, spójnik i raczej nie zwiększa szans na znalezienie podobnego artykułu.

Teraz należy wyszukać w bazie danych wszystkie rekordy zawierające jakiś lub artykuł lub wszystkim lub niczym.

Należy wyszukać powtarzające się rekordy, następnie zliczyć ich ilość, porównać, usunąć powtarzające się, a następnie wyświetlić.



Wyśmienita podpowiedź. Tylko jeszcze jedno pytanko w tym względzie. Jakaś funkcja, która by mi rozbiła słowa w zdaniach istnieje?
Ilware
  1. explode( ".",$String );
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.