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 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

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:10