Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Porównanie tekstu z tekstem w bazie
Forum PHP.pl > Forum > Przedszkole
wicy
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ó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?
CuteOne
Poczytaj o porównaniach na kolumnach z indeksem fulltext ewentualnie LIKE. Twoja konstrukcja jest do d*** bo pobierasz wszystkie rekordy z bazy
wicy
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 sad.gif

Dzięki za nakierowanie. Jakby lepiej i szybciej działa SELECT 'kolumna' FROM tabela WHERE MATCH() AGAINST()
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.