![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam dużą bazę danych ze zdjęciami, i słowami kluczowymi. W uproszczeniu baza składa się z 2 tabel: zdjęcia z polami id_zdjecia i ścieżką do zdjęcia oraz tabelę słowa kluczowe, gdzie mam pola id, id_zdjecia, slowo. I teraz chciałbym jednym zapytaniem sql znaleźć zdjęcia które mają przypisane np 2 słowa kluczowe np: jeśli wpiszę "piłka nożna", chcę znaleźć tylko te identyfikatory zdjęć które mają słowo PIŁKA i NOŻNA. Wszelkie moje próby kończą się 2 wyjściami. Albo dostaję wynik w postaci identyfikatorów zdjęć zawierających słowo piłka lub słowo nożna, albo pusty zbiór danych. Oczywiście mam w bazie słów kluczowych takie wpisy, gdzie do jednego identyfikatora zdjęcia przypisane są oba te słowa. Robię to mniejwiecej tak: OPCJA 1:
OPCJA 2:
Proszę o jakąś podpowiedź, bo stanąłem w miejscu, w którym nie spodziewałem się w ogóle problemu... |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dokładnych danych nie znam, ale wygląda to mniej więcej tak że najczęstsze słowo kluczowe występuje w bazie ponad 30tys razy, a zdjęć jest tylko ok 26 tysięcy. Może to dać Ci jakieś pojecie ile tam jest "syfu" (IMG:style_emoticons/default/winksmiley.jpg) Wszystkich słów razem jest ok 600tys i to już po odfiltrowaniu wielu rzeczy, bo zaczynałem z pułapu 750tys słów.
I jeszcze jedno pytanie, bo napewno zostaję przy konstrukcji z CROSS JOIN. Gdy chcę 3 słowa: WARSZAWA, STADION, KONFERENCJA to robię tak i działa:
Gdybym chciał wszystkie zdjęcia gdzie jest słowo kluczowe WARSZAWA, STADION ale nie ma słowa KONFERENCJA to spłodziłem coś takiego, ale to tez nie chce współpracować i nie uwzględnia 3 warunku:
WHY, OH WHY? (IMG:style_emoticons/default/winksmiley.jpg) Ten post edytował qchar 3.01.2010, 23:28:48 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
WHY, OH WHY? (IMG:style_emoticons/default/winksmiley.jpg) Nieubłagane prawa logiki zbiorów. Musiałbyś zrobić coś takiego: 1. Uzyskać listę rekordów które mają słowa 'STADION' i 'WARSZAWA' 2. Z tej listy usunąć rekordy które mają słowo 'KONFERENCJA' Krok 1. Potrafisz. Krok 2 właściwie też powinieneś. Kwestia odpowiedniego ułożenia podzapytania. Kod SELECT
sq1.ID FROM (podzapytanie1) AS sq1 --podzapytanie1 to zapytanie realizujące krok1 powyżej LEFT JOIN ( SELECT fl_kw_img_id FROM keywords WHERE fl_kw_word = 'KONFERENCJA' ) AS sq2 ON (sq1.ID = sq2.fl_kw_word) WHERE fl_kw_img_id.sq2 IS NULL Ten post edytował Mchl 5.01.2010, 00:24:40 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 18:02 |