Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Optymalizacja zapytania
tadeurz
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


Mam mały problem z zapytaniem.
Mam tabelki:
board_topic -> id,id_autora_tematu,id_autora_ostaniego_posta
user -> id,name

Nazwy są intuicyjne, mimo tego wyjaśnię:
Pierwsza przechowuje id tematu, id użytkownika który założył temat, i id użytkownika który jako ostatni wypowiedział się w temacie.
Problem pojawia się kiedy chce pobrać 20 rekordów. Wykombinowałem to tak:
  1. SELECT board_topic.topic ,user.name
  2. FROM board_topic
  3. LEFT JOIN user ON user.id = board_topic.id_autora_tematu OR user.id = board_topic.id_autora_ostaniego_posta
  4. LIMIT 20
  5. // wynik
  6. 1. Przykładowy temat numer 1 | Michał //autor tematu
  7. 2. Przykładowy temat numer 1 | Maciek //autor ostatniego postu
  8. 3. Przykładowy temat numer 2 | Monika //autor tematu
  9. 4. Przykładowy temat numer 2 | Maciek //autor ostatniego postu

Jak widać każdy z tematów występuje 2 razy, i jest to zrozumiałe -> tak skonstruowane jest zapytanie.
Jest jakiś inny sposób aby złączyć tabele w sposób: jednemu rekordowi z jednej dołączamy 2 z innej tabeli ?

//----------------------------------------------
Coś nie daję rady z tym SQL dzisiaj (IMG:style_emoticons/default/biggrin.gif)
Mam tabele z tematami -> które podzieliłem na kategorię. I chce pobrać po 20 rekordów z każdej.
  1. SELECT * FROM board_topic WHERE category =`help` LIMIT 20
  2. SELECT * FROM board_topic WHERE category = `question` LIMIT 20
  3. SELECT * FROM board_topic WHERE category = `question` LIMIT 20


Oczywiście mogę to zrobić jak wyżej z 3 SELECT wykorzystując multipleQuery. Ale da się to zrobić lepiej ? optymalniej ? może w 1 zapytaniu ?


Ten post edytował tadeurz 31.05.2013, 23:30:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tadeurz
post
Post #2





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


bpskiba nie może tak być.
Ja chce pobrać po 20 z każdek kategorii. 20 z help i 20 z question.
/--------
Dodam tylko że jestem świadomy innego rozwiązania:
W oryginalnym skrypcie oczywiście znajduje się jeszcze jedna tabela:
  1. Board_post -> id_postu, id_tematu, id_autora, id_data_postu


Można by w tabeli board_topic zamiast id_autorów przechowywać id_pierwszego postu oraz id_ostatniego postu. I JOIN’nować koleją tabelę -> board_post. W takiej sytuacji nie dublowałbym tych samych danych (id_autorów, datę_postów).
Wolę świadomie zwiększyć wielkość bazy danych niż obciążać ją bardziej złożonymi zapytaniami. To rozwiązanie wydaje się optymalniejsze, jeżeli się mylę proszę o odpowiedź.


Ten post edytował tadeurz 1.06.2013, 13:22:38
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: 14.10.2025 - 02:49