Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Podzapytanie
Forum PHP.pl > Forum > Przedszkole
chang
Witajcie, probuje stworzyc zapytanie ktore posortuje mi tematy wg czasu ostatniego dodanego postu korzystajac z 2 tabel. Nie jestem biegly w takich kombinacjach i na chwile obecna stworzylem szkielet takiego zapytania.

SELECT * FROM `tematy` ORDER BY (SELECT `czas` FROM `posty` WHERE `id_tematu` = xxx ORDER BY `czas` DESC)

W podzapytaniu brakuje przynajmniej id aktualnego tematu by wiedzial jakie posty wybrac.
dr_bonzo
Zdenormalizuj baze i zapisz czas dodania nowego postu w topiku == prostsza SQLka i szybsza przy duzym forum
no_face
Wg mnie nalezy unikac przechowywania redundantnych danych, a zapytanie troche zmodyfikowac.

  1. SELECT `id` AS idd FROM `tematy` ORDER BY (SELECT `czas` FROM `posty` WHERE `id_tematu` = idd ORDER BY `czas` DESC LIMIT 1 ) DESC


Owe zapytanie posortuje Ci tematy wg daty ostatniego posta, im nowszy post w danym temacie tym temat wyzej. W tym przypadku zapytanie wybierze tylko id, ale wystarczy po pierwszym slowie SELECT dodac reszte interesujacych nas nazw kolumn.
dr_bonzo
no_face, unikac dopoki ich duplikacja sprawi ze aplikacja zacznie dizalac szybko, a nie zamulac sie przy byle joinie, przy 1000cach userow (patrz twitter, flickr.)
no_face
W takiej sytuacji trzeba byloby zastosowac dodatkowe zapytanie aktualizujace wpis w tabeli topic z kazdym dodaniem nowego postu, co jednak wydaje sie i tak wydajniejsza metoda, niz JOIN'owac liste tematow.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.