Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Porównanie tekstu z tekstem w bazie
wicy
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

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


Muszę się zmierzyć z porównaniem tekstu wprowadzanego przez użytkownika z wieloma tekstami zawrtymi w bazie.
Ponieważ tekst wprowadzany może być wprowadzony w różny sposób (pisownia, przecinki, spacej, znaki specjalne), wydzielam poszczególne wyrazy do tablicy i ją chcę porównać z tekstem w bazie (wpisanym w równie dowolny sposó(IMG:style_emoticons/default/cool.gif) .
Mam "Selecta" i pętlę while. W pętli while musze rozbić tekst pobrany z bazy na tablicę i porównywać jej kazdy element z każdym elementem tablicy wprowadzonej.
Wyglądać to będzie mniej więcej tak:
  1. wydzielenie wprowadzonego tekstu do $wyrazy_wprowadzone
  2.  
  3. SELECT ....
  4. ....
  5. WHILE $row ....
  6. {
  7. .... wydzielenie wyrazów z $row['text'] do tablicy $wyrazy_w_bazie
  8. foreach $wyrazy_w_bazie
  9. {
  10. foreach $wyrazy_wprowadzone
  11. {
  12. if $wyrazy_wprowadzone = $wyrazy_w_bazie - ustawienie flagi przetworzonej po pętlach
  13. czyli dowolny wyraz wprowadzony już jest gdzieś w bazie
  14. }
  15. }
  16. }


Pytanie: Czy to poprawna konstrukcja? Czy da się to zrobić inaczej, optymalniej?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Poczytaj o porównaniach na kolumnach z indeksem fulltext ewentualnie LIKE. Twoja konstrukcja jest do d*** bo pobierasz wszystkie rekordy z bazy
Go to the top of the page
+Quote Post
wicy
post
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

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


Myślałem, że muszę przetworzyć wszystkie wiersze w tabeli z wybraną jedną tylko kolumną zawierającą teksty.
Jak inaczej sprawdzić, czy którykolwiek z wyrazów w tekście: 'Abc, Bcd, Efg, Ghi' nie występuje we wcześniej wprowadzonych do bazy łańcuchach typu np. 'Xyz, Xxx', 'Yyy, Zzz', 'Abc, Pqr', 'Efg', 'Hwdp, Ghi'.
LIKE porównuje mi cały 'Abc, Bcd, Efg, Ghi' z całym tekstem pobranym z bazy, czyli np. z 'Abc, Pqr'. Takie porównanie da mi flase, a akurat w tym wypadku powinno dać true, gdyż dowolny wyraz z 'Abc, Bcd, Efg, Ghi' znajduje się w łańcuchu 'Abc, Pqr'. Czyż źle myślę?
Skrypt napisany przy tym założeniu póki co wydaje się działać. Nie potrafię tego zapisać optymalniej (IMG:style_emoticons/default/sad.gif)

Dzięki za nakierowanie. Jakby lepiej i szybciej działa SELECT 'kolumna' FROM tabela WHERE MATCH() AGAINST()

Ten post edytował wicy 1.10.2011, 08:41:28
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 21:36