Mam następujący problem:
Tworzę wyszukiwarkę do bazy danych, która musi zwracać określoną w PHP ilość rezultatów (chodzi o stronicowanie wyników). Wyszukiwarka oparta jest na dwóch, a w zasadzie na trzech tabelach:
1. tlumaczenie_ramowe (tutaj przeszukuje kolumnę tytul),
2. slowo_z_tlumacz (tabela wynikająca z relacji wiele-do-wielu),
3. slowa_kluczowe (przeszukiwane są nazwy słów kluczowych).
Każde tlumaczenie ramowe posiada co najmniej jedno słowo kluczowe. Górna granica nie jest ustalona.
Efektem zapytania powinny być następujące wyniki:
- zwrócenie id tłumaczeń ramowych, w których tytuł spełnia warunek
- zwrócenie COUNT ilości słów kluczowych danego tłumaczenia, które spełniają warunek. W przypadku braku COUNT = 0.
Chodzi mi o realizację wyżej wymienionych założeń za pomocą JEDNEGO zapytania korzystającego z klauzuli LIMIT x, y.
Zainteresowanym z góry dziękuję za pomoc i pozdrawiam.
ok, udało mi się sklecić działające zapytanie, które wygląda tak:
SELECT DISTINCT tr.id_tlumaczenia, ( SELECT COUNT(sk.id_slowa) FROM slowa_kluczowe sk, _slowo_z_tlumacz_ szt WHERE sk.slowo_kluczowe LIKE '%$pytanie%' AND szt.id_tlumaczenia = tr.id_tlumaczenia AND sk.id_slowa = szt.id_slowa) FROM tlumaczenie_ramowe tr INNER JOIN _slowo_z_tlumacz_ szt ON szt.id_tlumaczenia = tr.id_tlumaczenia INNER JOIN slowa_kluczowe sk ON sk.id_slowa = szt.id_slowa WHERE sk.slowo_kluczowe LIKE '%$pytanie%' OR tr.tytul_pl LIKE '%$pytanie%' ORDER BY ( SELECT COUNT(sk.id_slowa) FROM slowa_kluczowe sk, _slowo_z_tlumacz_ szt WHERE sk.slowo_kluczowe LIKE '%$pytanie%' AND szt.id_tlumaczenia = tr.id_tlumaczenia AND sk.id_slowa = szt.id_slowa) DESC LIMIT $poczatek, $itemsPerPage
Jeśli ktoś ma jakiś pomysł jak można do jakoś ładniej napisać, skrócić to piszcie.