![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 305 Pomógł: 25 Dołączył: 27.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam w bazie takie oto tabele z autorami i wierszami : love_authors Kod ID, NAME_FIRST, NAME_LAST, NAME_PREFIX, NAME_URL, MAIL, DESCRIPTION, IMAGE, STATUS love_lyrics Kod ID, AUTHOR_ID, TITLE Chcę na stronie teraz wyświetlić autorów wraz z liczbą wierszy (liryka zliczana z tabeli love_lyrics). Relacja zachodzi pomiędzy ID i AUTHOR_ID. Dotychczas robiłem to w następujący sposób:
Oraz w pętli while dla każdego rekordu pobieram osobno liczbę wierszy:
Dla każdej podstrony wykonywanych jest więc kilka połączeń (6). Czy mógłbym jakoś połączyć te tabele w celu optymalizacji zapytania? Z góry dziękuję za wszelkie podpowiedzi. Ten post edytował kilas88 9.03.2009, 18:11:44 |
|
|
![]() |
-lukasamd- |
![]()
Post
#2
|
Goście ![]() |
Hm... może dodaj do love_authors pole liczbowe LYRICS w nim trzymaj bieżącą liczbę wierszy.
W wypadku dodawania / usuwania wiersza, wykonasz zapytanie które doda lub odejmie od tej wartości 1. W ten sposób nie tylko wywalisz konieczność robienia 6x COUNT, ale umożliwisz łatwe przedstawianie tego, kto napisał najwięcej np.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 305 Pomógł: 25 Dołączył: 27.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wiem wiem, myślałem nad tym. Tyle tylko tym sposobem dodając lub usuwając wiersze musiałbym aktualizować 2 tabele, więc zawsze trochę więcej roboty
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Można i byłoby to raczej najszybsze rozwiazanie.
Lecz można to tez policzyc w jednym zapytaniu
Ten post edytował wookieb 9.03.2009, 18:21:05 -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 305 Pomógł: 25 Dołączył: 27.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za pomoc, skorzystam z podzapytań
![]() ![]() mam jeszcze jedno pytanie odnośnie optymalizacji zapytań na ww. bazy danych. mam więc następujące tabele w bazie: love_authors ID, NAME_FIRST, NAME_LAST, NAME_PREFIX, NAME_URL, MAIL, DESCRIPTION, IMAGE, STATUS love_lyrics ID, AUTHOR_ID, TITLE love_tags ID, ID_PAGE, TAG_URL, TAG_VAL mam jakiś wiersz na stronie. chciałbym, by z powyższych tabel zostały pobrane podobne wiersze, np. 5 tekstów tego samego autora i 5 tekstów z tych samych tagów. dotychczas robię dwa połączenia - pobieram 5 tagów i 5 tekstów tego samego autora, po czym łącze wszystko w jedną tablicę i obcinam z najbardziej trafnymi wynikami:
Czy mógłbym wykonać to jakoś bardziej przemyślanie? Jestem w trakcie czytania świetnej książki o MySQL (Paul DoBois 'MySQL'), lecz dopiero zaczynam tę lekturę i słaby jestem ![]() Ten post edytował kilas88 9.03.2009, 21:17:05 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 1 Dołączył: 27.08.2007 Skąd: Londyn Ostrzeżenie: (0%) ![]() ![]() |
Można i byłoby to raczej najszybsze rozwiazanie. Lecz można to tez policzyc w jednym zapytaniu
wookieb mam male pytanko (moze sie orientujesz), a nie lepiej wyrzucic 'STATUS = 1' z podzapytania jesli podany warunek jest juz sprecyzowany w glownym WHERE? tj.
albo nawet
jak myslisz, ktore bedzie wydajniesze w tym wypadku? sprawdz explaina dla obydwoch, dla drugiego zapytania pokazuje zawsze 'select_type' -> 'SIMPLE' ale jednoczesnie 'Using where; Using temporary; Using filesort' co nie jest mile widzane, prawda? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 04:57 |