Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Inteligentne wyszukiwanie z kilku tabel, + stronicowanie
Sztef89
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

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


Witam, mam problem z zapytaniem. Chciałbym jednym zapytaniem przeszukać 7 tabel, wyniki posegregować po najbardziej trafnych i ustawić LIMIT x,10. Na razie zrobiłem SELECT'a dla dwóch tabel (bez stronicowania i sortowania wyników):

  1. SELECT uniqid, tytul, tytul_oryg, rok FROM media_filmdata
  2. WHERE MATCH(tytul,tytul_oryg) AGAINST('słowo szukane' IN BOOLEAN MODE)
  3. UNION ALL
  4. SELECT uniqid, tytul, tytul_oryg, rok FROM media_serialdata
  5. WHERE MATCH(tytul,tytul_oryg) AGAINST('słowo szukane' IN BOOLEAN MODE)


Jakbym dodał limit na końcu to wyniki z drugiej tabeli by się wcale nie wyświetliły (nawet jakby słowo szukane było trafione w 100%) dlatego chciałbym posortować wyniki od najlepiej pasujących i wtedy dopiero ograniczyć wyświetlanie.

Przeszukałem już sporo stron, i sporo się dowiedziałem ale nie mogę znaleźć rozwiązania na własnie ten problem.
Z góry dzięki !


-- EDIT --

Trochę pokombinowałem i uzyskałem coś takiego:

  1. SELECT uniqid, tytul, tytul_oryg, rok, MATCH(tytul,tytul_oryg) AGAINST('house') AS score FROM media_filmdata
  2. WHERE MATCH(tytul,tytul_oryg) AGAINST('house')
  3. UNION ALL
  4. SELECT uniqid, tytul, tytul_oryg, rok, MATCH(tytul,tytul_oryg) AGAINST('house') AS score FROM media_serialdata
  5. WHERE MATCH(tytul,tytul_oryg) AGAINST('house')
  6.  
  7. ORDER BY `score` DESC


Ale od razu można zauważyć, że score wyników jest zależny od ilości wyników z danej tabeli. Chciałbym każdą tabelę ograniczyć aby nie "przytłumiła" wyników z drugiej tabeli ("sprawiedliwość"). Już prawie jest to co chce uzyskać ale to tylko prawie... :/

Czyli jak zrobić aby waga nie była uzależniona od ilości wyników TYLKO o samej trafności słowa ?

Ten post edytował Sztef89 7.11.2011, 14:30:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sztef89
post
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

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


Ciekawe te widoki, już wiem o co chodzi i myślę że takie wyszukiwanie po takim widoku na pewno nie będzie super wydajne... (45tys rekordów w filmach o ok 30tys w serialach)
Czyli w moim przypadku proponujesz zrobić odrębną tabelą zawierającą tylko wybrane kolumny z tych wszystkich 7 tabel ?
Bo w sumie z każdych tej tabel potrzeba mi: uniqid, tytul, tytul_oryg, rok, czyli tylko 4 kolumny. Wyniki wyszukiwania byłyby sprawiedliwe dopiero gdy to się wrzuci do jednego wora... fizycznie czy też wirtualnie (widoki).

Napisz czy dobrze zrozumiałem z tworzeniem tej jednej wielkiej tabeli (IMG:style_emoticons/default/smile.gif)

Cytat
2. Jeżeli masz wiele rodzajów rzeczy na stronie tak jak u Ciebie widzę seriale i filmy - można również zamiast 1 zapytania (bardzo kombinowanego) obejść problem szybciutko dodając select obok wyszukiwania z wyborem gdzie szukamy - kto powiedział że musi tam się znaleźć opcja "szukaj wszedzie"


To by ułatwiło dużo spraw ale te rozwiązanie nie przejdzie w moim projekcie. Musi być przeszukiwanie po dwóch kolumnach z każdej tabeli jednocześnie dołączając informacje o id oraz rok.

Cytat
3. Można zamiast jednego zapytania dać tyle ile mamy rodzaji szukanych elementów i wyświetlić je na przykład tak:

hymm... (IMG:style_emoticons/default/smile.gif)


Chyba skorzystam z tej 3 propozycji - nawet chyba będzie lepiej a na pewno wydajniej i bez kombinowania. Jeszcze moi drodzy mam jedno pytanie.
Przy zapytaniu SELECT i ograniczeniu go przez LIMIT x,10 dostaniemy co najwyżej 10 rekordów zaczynając od x. Jak zastosujemy funkcje COUNT(kolumna) to zliczy nam do 10. Jest jakaś funkcja która zliczy nam ile jest rekordów pod to zapytanie bez wywoływania drugi raz tego samego selecta bez limitu z funkcją COUNT(kolumna) ?

Ten post edytował Sztef89 7.11.2011, 17:30:01
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: 13.10.2025 - 05:37