Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukiwanie słów kluczowych PRZYSPIESZENIE ZAPYTANIA
grzegorz-gg
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 25.12.2004

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


Witam,

w jaki sposób napisać zapytanie aby wyszukiwało listę artykułów które maja określone słowa kluczowe wpisane przez użytkownika

np. po wpisaniu słów kluczowych 'a', 'b', 'c'
zostały wyświetlone artykuły o nazwie: artykul1 i artykul3

poniżej przedstawiam tabele z bazie danych

artykul (Zawiera artykuły)

  1. +------+------------+
  2. |  ID  |   nazwa    |
  3. +------+------------+
  4. |   1  |  artykul1  |
  5. |   2  |  artykul2  |
  6. |   3  |  artykul3  |
  7. +------+------------+


keywords ( wszystkie możliwe słowa kluczowe )
  1. +------+-----------+
  2. |  ID  |  keyword  |
  3. +------+-----------+
  4. |   1  |     a     |
  5. |   2  |     b     |
  6. |   3  |     c     |
  7. +------+-----------+


tabela_keywords ( przypisanie słów kluczowych do elementów tabeli artykul )
  1. +-------------+---------------+
  2. |  ID_artykul |  ID_keywords  |
  3. +-------------+---------------+
  4. |      1      |       1       |
  5. |      1      |       2       |
  6. |      1      |       3       |
  7. |      2      |       3       |
  8. |      3      |       1       |
  9. |      3      |       2       |
  10. |      3      |       3       |
  11. +-------------+---------------+


Za pomoc z góry dziękuje.
Pozdrawiam

Ten post edytował grzegorz-gg 16.08.2008, 18:52:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Wykonaj EXPLAINa dla tego zapytania i wklej tu wynik:
  1. EXPLAIN SELECT A.artykul_id, A.artykul_title
  2. FROM keywords K, artykul A
  3. JOIN tabela_keywords TK ON A.artykul_id = TK.artykul_id
  4. WHERE K.keywords_name IN ('a', 'b', 'c') AND TK.keywords_id = K.keywords_id
  5. GROUP BY A.artykul_id
  6. HAVING COUNT(A.artykul_id) = 3
  7. ORDER BY A.artykul_id ASC LIMIT 0, 30


i spróbuj zamienić miejscami warunki, czyli:
  1. WHERE TK.keywords_id = K.keywords_id AND K.keywords_name IN ('a', 'b', 'c')


Ten post edytował phpion 17.08.2008, 11:15:39
Go to the top of the page
+Quote Post

Posty w temacie


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 - 07:09