Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][MySQL] wyszkiwanie
dtb
post 6.01.2006, 19:58:08
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


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?

Ten post edytował dtb 6.01.2006, 20:08:31


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post 6.01.2006, 21:54:38
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


zainteresuj sie "MATCH (title,body) AGAINST ('MySQL')" ...

hint: wklej w google (1 link)
Go to the top of the page
+Quote Post
dtb
post 7.01.2006, 16:18:43
Post #3





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


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.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 20:01