Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobranie najnowszego wpisu z drugiej tabeli
potreb
post 3.03.2010, 18:44:37
Post #1





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Witam
  1. $sql = "SELECT f.*, t.* FROM forums f LEFT JOIN forum_topics t on t.topics_fid = f.forums_id
  2. ORDER BY f.forums_position, t.topics_date ASC";


Listuje nazwy forum i przy okazji chcę dodać info z tabeli forum_topics o najnowszym wpisie, wszystko było by okey, gdyby nie fakt, że listuje mi wszystkie najnowsze tematy, jak ustawić jakiś limit albo jak skonstruować zapytanie aby z tabeli forum_topics pobrać najnowszy temat dla danego forum??

Okey, pomyślałem, jednak nie wiem czy to moje myślenie jest dobre.
Kod
SELECT  f.*, t.*  FROM forums f LEFT JOIN forum_topics t on t.topics_fid = f.forums_id
        WHERE t.topics_date = (SELECT max( `topics_date` ) FROM forum_topics WHERE topics_fid = f.forums_id) OR t.topics_date  IS NULL
        ORDER BY f.forums_position, t.topics_date DESC


Pobiera nazwy forów razem z najnowszym topiciem wg topics_date oraz te dla których nie ma nic przypisanego smile.gif Napiszcie czy zrobiłem to w miarę normalnie czy raczej okrężnie??


--------------------

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Mchl
post 3.03.2010, 22:56:53
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Średnio. Działać, działa, ale podzapytania w klauzuli WHERE, to coś z czym optymalizator MySQL nie radzi sobie najlepiej. Musisz więc odwalić robotę za niego jakoś tak.

Kod
SELECT  
  f.*, t.*  
FROM
  forums AS f
LEFT JOIN
  forum_topics AS t
ON
  t.topics_fid = f.forums_id
INNER JOIN (
  SELECT
    topics_fid,
    MAX(topics_date) AS topics_date
  FROM
    forum_topics
  GROUP BY
    topics_fid
) AS td
ON
  td.topics_fid = t.topics_fid
  AND td.topics_date = t.topics_date
ORDER BY
  f.forums_position, t.topics_date DESC


Ten post edytował Mchl 3.03.2010, 22:58:09
Go to the top of the page
+Quote Post
gothye
post 3.03.2010, 23:06:56
Post #3





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


pisząć forum ,najlepiej w tabeli forum dać tabele last_post_id ,gdzie dodając post w postaci rekordu do SQL robisz jednocześnie UPDATE pola last_post_id  winksmiley.jpg dzieki temu przyśpieszasz pracę z SQL 


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
potreb
post 3.03.2010, 23:28:53
Post #4





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Cytat(gothye @ 3.03.2010, 23:06:56 ) *
pisząć forum ,najlepiej w tabeli forum dać tabele last_post_id ,gdzie dodając post w postaci rekordu do SQL robisz jednocześnie UPDATE pola last_post_id winksmiley.jpg dzieki temu przyśpieszasz pracę z SQL


Na początku tak miałem, ale stwierdziłem, że po co to skoro można pobrać informacje z drugiej tabeli.

Nie wiedziałem zresztą że to aż taki problem :/

Ten post edytował potreb 3.03.2010, 23:29:45


--------------------

Go to the top of the page
+Quote Post
Mchl
post 3.03.2010, 23:41:30
Post #5





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Denormalizacja czasami jest przydatna, owszem. Tylko żeby nie przesadzić z nią smile.gif
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:37