Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączone zapytanie mysql dla szukania fraz i słów
Forum PHP.pl > Forum > Bazy danych > MySQL
www.aukcje.fm
Witam,

Temat : połączenie 4 zapytań w jedno

Szukamy na potrzeby systemu wyszukiwarki dla dalszej obróbki zapytań i wyników pewnym zapytaniem sql dla full text, lecz nie zdaje ono dobrych rezultatów.

Zadanie : budowa jednego zapytania w pliku php (nawet przy wykorzystaniu tabeli tmp) bez względów na długość trwania zapytania.

Odpowiedź : może być inne zapytanie ale generalnie aby ustawiało najpierw frazy "te w cudzysłowu" potem te +występujące +razem, potem te ze zwykłego match against ('nasza fraza') a potem te z systemu querty expantion (czyli dobierane z podwójnego wyszukiwania). Więc z połączenia 4 zapytań a każde (jeżeli to możliwe) z ilością występowania.

Czyli chcemy połączyć cztery wyszukiwania numerów ID w jedno z pogrupowanymi wynikami bez powtarzania ID

1)
  1. SELECT * FROM `tabela` WHERE `tekst` LIKE '%nasza fraza%'


2)
  1. SELECT id
  2. FROM `tabela`
  3. WHERE MATCH `tekst`
  4. AGAINST ('+nasza +fraza' IN BOOLEAN MODE )


3)
  1. SELECT id
  2. FROM `tabela`
  3. WHERE MATCH `tekst`
  4. AGAINST ('nasza fraza')


4)
  1. SELECT id
  2. FROM `tabela`
  3. WHERE MATCH `tekst`
  4. AGAINST ('nasza fraza' WITH QUERY EXPANSION )



hmm czy ktoś mnie zrozumie :|
wiiir
no to robisz uniona albo insert into tabela_tymczasowa i pozniej prosty select

W czym problem o nie bardzo kumam.
mmmmmmm
  1. SELECT * FROM `tabela` WHERE (`tekst` LIKE '%nasza fraza%') OR (MATCH `tekst`AGAINST ('+nasza +fraza' IN BOOLEAN MODE )) OR (MATCH `tekst` AGAINST ('nasza fraza')) OR (MATCH `tekst`AGAINST ('nasza fraza' WITH QUERY EXPANSION ))

dla lepszej czytelności poszczegołne warunki dałem w nawiasach.
www.aukcje.fm
mmmmmmm smile.gif

A jak to wyświetlić z podziałem 4 fazowym

(wyniki z pierwszego zapytania)
(wyniki z drugiego zapytania)
(wyniki z trzeciego zapytania)
(wyniki z czwartego zapytania)

Bez powtarzania wyników w drugim z pierwszego, w trzecim z pierwszego i drugiego, w czwartym z trzeciego drugiego i pierwszego) oto jest pytanie i jak w dodatku podać to w jakimś rankingu trafności.

To było by już serio git.




mmmmmmm
Pikuś...
  1. SELECT *, Case When (`tekst` LIKE '%nasza fraza%') then 1 When (MATCH `tekst`AGAINST ('+nasza +fraza' IN BOOLEAN MODE )) then 2 ... end warunek FROM `tabela` WHERE (`tekst` LIKE '%nasza fraza%') OR (MATCH `tekst`AGAINST ('+nasza +fraza' IN BOOLEAN MODE )) OR (MATCH `tekst` AGAINST ('nasza fraza')) OR (MATCH `tekst`AGAINST ('nasza fraza' WITH QUERY EXPANSION )) ORDER BY warunek
www.aukcje.fm
error mały

#1064 - Something is wrong in your syntax obok 'end warunek FROM `tabela` WHERE (`tekst` LIKE ' w linii 2



a już ok. nie dałem cyfry 4.

Teraz widzę że ładnie podaje wyniki, ale... ale powtarza numery ID. Jak zrobić aby nie powtarzało numerów id ?
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.