Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> nie typowe polaczenie tabel
gantel
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.04.2003
Skąd: Łańcut

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


  1. SELECT
  2. nazwy.id_dok id_n,
  3. nazwy.nazwa,
  4. 60 AS pkt_nazwa,
  5.  
  6. dok_opisy.id_dok id_o,
  7. dok_opisy.opis,
  8. 40 AS pkt_opis
  9.  
  10. FROM nazwy, opisy
  11.  
  12. WHERE nazwy.nazwa LIKE "%'.$szukaj.'%" AND opisy.opis LIKE "%'.$szukaj.'%"


Chodzi o to ze chce pobrac rekordy gdzie

z tabeli 'nazwy' pole 'nazwa' pasuje do zmiennej $szukaj
z tabeli 'opisy' pole 'opis' pasuje do zmiennej $szukaj

Jezeli dodam warunek
nazwy.id_dok=opisy.id_dok

Nie zostana pobrane rekordy ktore:
zawieraja tylko w polu nazwa szukane slowo ale w opisie ich juz nie ma
zawieraja tylko w opisie szukane slowo ale w nazwie ich juz nie ma

Na koniec chce zsumowac pkt_nazwa + pkt_opis w ten sposob i posortowac sumy malejaco:

Jezeli pola nazwa i w opis zawieraja szukane slowo zeby suma wynosila 60 + 40 =100
Jezeli tylko pole nazwa zawiera szukane slowo suma wynosila 60 + 0 = 60
Jezeli tylko pole opis zawiera szukane slowo suma wynosila 0 + 40 = 40

Tak wygladaja tabele

nazwy:

id_dok | nazwa
-------------------------
1 |zielony
2 |czerwony
3 |niebieski
4 |zolty


opisy:

id_dok | opis
-------------------------
1 |kolor zielony jest cieply
2 |to kolor goracy
3 |niebieski jest kolorem zimnym, nie tak jak zielony
4 |zolty to kolor slonecznikow

Zalozmy ze szukamy slowa: 'zielony'


Chce otrzymac taki wynik

id_dok | pkt | nazwa | opis
---------------------------------------------------------------------------
1 | 100 | zielony | kolor zielony jest cieply
3 | 40 | niebieski | niebieski jest kolorem zimnym, nie tak jak zielony


Jak skonstruowac takie zapytanie do mysqla lub wspomoc sie ewentualnie php zeby uzyskiwac takie wyniki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
gantel
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.04.2003
Skąd: Łańcut

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


Rzeczywiscie to zapytanie jest OK tyle ze proboje teraz dodac jeszcze trzeci warunek tak wyglada moje zapytanie juz konkretnie do tej bazy

  1. SELECT
  2. nazwy.id_dok,
  3. nazwy.nazwa,
  4. nazwy.nazwa_en,
  5. opisy.opis,
  6. sklucze.KEY,
  7. CASE
  8.  
  9. WHEN
  10. nazwy.nazwa LIKE "%'.$szukaj.'%" AND opisy.opis LIKE "%'.$szukaj.'%" AND sklucze.`key`="'.$szukaj.'"
  11. THEN 100
  12.  
  13. WHEN
  14. nazwy.nazwa LIKE "%'.$szukaj.'%" AND sklucze.`key`="'.$szukaj.'"
  15. THEN 80
  16.  
  17. WHEN
  18. nazwy.nazwa LIKE "%'.$szukaj.'%" AND opisy.opis LIKE "%'.$szukaj.'%"
  19. THEN 65
  20.  
  21. WHEN
  22. opisy.opis LIKE "%'.$szukaj.'%" AND sklucze.`key`="'.$szukaj.'"
  23. THEN 55
  24.  
  25. WHEN nazwy.nazwa LIKE "%'.$szukaj.'%" THEN 45
  26. WHEN sklucze.`key`="'.$szukaj.'" THEN 35
  27. WHEN opisy.opis LIKE "%'.$szukaj.'%" THEN 20
  28.  
  29. END AS pkt
  30.  
  31. FROM `!new_dok_nazwy` nazwy,
  32. `!new_dok_opisy` opisy,
  33. `!new_dok_keys` sklucze
  34.  
  35. WHERE (
  36. nazwy.nazwa LIKE "%'.$szukaj.'%" OR opisy.opis LIKE "%'.$szukaj.'%" OR sklucze.`key`="'.$szukaj.'"
  37. ) AND nazwy.id_dok=opisy.id_dok AND nazwy.id_dok=sklucze.id_dok
  38.  
  39.  
  40. GROUP BY id_dok
  41. ORDER BY pkt DESC, nazwy.nazwa


Nie moge uzyskac 100 pkt nie bierze jakby pod uwage w pierwszym warunku THEN tabeli 'sklucze'.
Natomiast gdy slowo wystepuje tylko w 'sklucze' punktuje na 35 pkt

Co moze byc tego przyczyna.

Ten post edytował gantel 22.02.2008, 14:42:06
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: 11.10.2025 - 22:20