Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][MySQL] wyszkiwanie
Forum PHP.pl > Forum > PHP
dtb
Posiadam strone z duza iloscia artykulow. Doszedlem do wniosku ze sam podzial na kategorie nie wystarczo aby skutecznie nawigowac. Postanowilem zrobic wyszukiwarke. Wymyslilem juz nawet algorytm ale napotkalem problem. Wyjasnie wszystki krok po kroku.

Mam dwie tabele:
Kod
arts_inf: - tabela z artami
ai_id (auto_increment) - id artykuly  <-----------------
ai_name - nazwa arta                                    |
ai_keywords - slowa kluczowe (do wyszukiwania)          |
                                                         |
arts_elm: - tabela z elementami artow                   |
ae_id (auto_increment)                                  |
ai_id - id arta  <--------------------------------------
ae_top - polozenie elementu od gory
ae_type - typ elementy (naglowek / tekst / grafika itd.)
ae_text - zawartosc elementu


mam nadzieje ze jasno to wytlumaczylem i bedziecie wiedziec jak dane sa zapisywane.
teraz wyjasniam jak by to mialo wyszukiwac:

  1. <?php
  2. $trafnosc = array();
  3.  
  4. $where = 'i.ai_name LIKE `%slowo_kluczowe_1%` OR i.ai_name LIKE `%slowo_kluczowe_2%` OR i.ai_keywords LIKE `%slowo_kluczowe_1%` OR i.ai_keywords LIKE `%slowo_kluczowe_2%` OR e.ae_tex LIKE `%slowo_kluczowe_1%` OR e.ae_text LIKE `%slowo_kluczowe_2%`';
  5.  
  6. $q = query ('SELECT i.ai_id, i.ai_name, i.ai_keywords, e.ai_id, e.ae_text, e.ae_typ FROM arts
    _inf as i, arts_elm as e WHERE %s'
    , $where);
  7.  
  8. while ($r = mysql_fetch_array ($q))
  9. {
  10. ...
  11. }
  12. ?>


w ten sposób do tablica $trafnosc zapelnia sie tak:

  1. <?php
  2. $trafnosc[ai_id] =
  3. (ile razy jakies slowo kluczowych wystapilo w kolumnie ai_name)*3 + (ile razy jakies slowo wystapilo w kolumnie ai_keywords)*3 + (ile razy jakis slowo kluczowe wystapilo w kolumnie ae_text gdzie ae_type == 'naglowek')*2 + (ile razy jakies slowo kluczowe wystapilo w kolumnie ae_text gdzie ae_type == 'tekst');
  4. ?>


teraz sortujemy tablice i mamy uporzadkowane od najbardziej trafnych do najmniej artow (asort + SORT_NUMERIC).

PYTANIE 1:
jezeli tablica jest uporzadkowana w ten sposob:
$trafnosc[23] = najwieksza_trafnosc;
$trafnosc[238] = duza trafnosc;
$trafnosc[59] = mniejsza trafnosc;
(...)
to jak za pomoca jednego selecta wybrac nazwy artow sortujac je aby piewszy wybrany rekord mial ai_id = 23, drugi ai_id = 238, treci ai_id = 59...

PYTANIE 2:
co myslicie o takim sposobie wyszukiwania?
ActivePlayer
zainteresuj sie "MATCH (title,body) AGAINST ('MySQL')" ...

hint: wklej w google (1 link)
dtb
ActivPlayer: To jest dobre rozwiazanie ale jak to zrobic gdy dane sa podzielone na 2 tabele. Oto przyklada artykulu:

arts_inf:
ai_id: 1
ai_name: OOP
ai_keywords: oop programowanie obiektowe obiekty obiekt klasa class klasy public...

arts_elm:
ae_id: 1
ai_id: 1
ae_top: 1
ae_type: header
ae_text: Wstep
--
ae_id: 2
ai_id: 1
ae_top: 2
ae_type: text
ae_text: Jakis tam se wstep do OOP
--
ae_id: 3
ai_id: 1
ae_top: 3
ae_type: header
ae_text: Zakonczenie
--
ae_id: 4
ai_id: 1
ae_top: 4
ae_type: text
ae_text: Podsumowanie o programowaniu obiektowym...

I jak tu wyszkuac dane?
Wystarczy ze powiecie mi odpowiedz na 'PYTANIE 1' z moje wczesniejszego postu. Dalej se dam rade.
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.