![]() |
![]() |
![]()
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):
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:
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że dobrze zrozumiałeś (IMG:style_emoticons/default/wink.gif) wariant 3 jest najłatwiejszy i nie wymaga dodatkowych działań (IMG:style_emoticons/default/wink.gif)
Co do pytania to niestety przy paginacji zawsze dwa zapytania ida parami. Musisz mieć wyniki (stronę wyników) z limitem "pobierz X wyników od rekordu nr Y" oraz "Count(*)" dla wszystkich. Z tego co mi wiadomo nie da się tego obejść - dopowiem tylko że zapytanie typu "SELECT count(*) AS liczba_filmow FROM filmy" przykładowo działa dość szybko (IMG:style_emoticons/default/wink.gif) nie musisz się tu martwić o wydajność (IMG:style_emoticons/default/wink.gif) Grunt abyś nie uzywał czegoś w stylu MYSQL_NUM_ROWS() - bo to jest dopiero nie wydajne (IMG:style_emoticons/default/tongue.gif) Jak zrobisz 2 zapytanka select + limit i select + count to będzie git (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że dobrze zrozumiałeś (IMG:style_emoticons/default/wink.gif) wariant 3 jest najłatwiejszy i nie wymaga dodatkowych działań (IMG:style_emoticons/default/wink.gif) Co do pytania to niestety przy paginacji zawsze dwa zapytania ida parami. Musisz mieć wyniki (stronę wyników) z limitem "pobierz X wyników od rekordu nr Y" oraz "Count(*)" dla wszystkich. Z tego co mi wiadomo nie da się tego obejść - dopowiem tylko że zapytanie typu "SELECT count(*) AS liczba_filmow FROM filmy" przykładowo działa dość szybko (IMG:style_emoticons/default/wink.gif) nie musisz się tu martwić o wydajność (IMG:style_emoticons/default/wink.gif) Grunt abyś nie uzywał czegoś w stylu MYSQL_NUM_ROWS() - bo to jest dopiero nie wydajne (IMG:style_emoticons/default/tongue.gif) Jak zrobisz 2 zapytanka select + limit i select + count to będzie git (IMG:style_emoticons/default/wink.gif) Dzięki za odpowiedź. Nawet nie myślę o używaniu MYSQL_NUM_ROWS() bo to by było przeciwieństwo wydajności hehe (IMG:style_emoticons/default/biggrin.gif) nie przyglądałem się jeszcze wydajności zapytania count(*) ale skoro mówisz że to ogólnie szybko działa to ok. Moje problemy zostały rozwiązane. Dzięki za pomoc ! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 00:12 |