![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 30.03.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A wiec tak. Mam dwie tabaele:
forumTopics: Kod +---------+-------+--------------------------------------------+------------+-------------+------------+
| topicID | topic | description | postNumber | existsSince | restricted | +---------+-------+--------------------------------------------+------------+-------------+------------+ | 1 | test | bla bla bla tutaj jeszcze wiecej ajkis bla | 0 | 2004-01-16 | 0 | | 2 | Drugi | Opis tematu drugiego | 10 | 2003-12-31 | 0 | +---------+-------+--------------------------------------------+------------+-------------+------------+ i forumArticles: Kod +-----------+---------+----------+--------+------------+---------+---------+
| articleID | topicID | parentID | author | date | topic | article | +-----------+---------+----------+--------+------------+---------+---------+ | 1 | 1 | 0 | lolo | 2004-01-18 | cos tam | hallo? | | 2 | 1 | 0 | pucek | 2004-01-18 | halo? | halo? | | 3 | 1 | 0 | rr | 2004-01-18 | ff | ff | | 4 | 2 | 0 | tt | 2004-01-01 | Watek 1 | 4343 | | 5 | 2 | 0 | gg | 2004-12-05 | Watek 2 | gg | | 6 | 2 | 0 | gg | 0000-00-00 | d | d | +-----------+---------+----------+--------+------------+---------+---------+ I teraz chcialbym dla kazdego topicID wyluskac z tej tabeli tego, kto dodal tam ostatniego posta. A wiec articleId, author, topic i date. Udaje mi sie niestety tylko articleID dla kazdeego topicID: [sql:1:6aa4b6e30d] SELECT topicID, MAX(articleID) FROM forumArticles GROUP BY topicID [/sql:1:6aa4b6e30d] Ale nie udaje mi sie juz do tego dopasowac odpowiedniego autora, daty i tematu posta. Wie ktos jak to zrobic? Moj serwer to 4.0.35, wiec nie dzialaja tam niektore sztuczki z SQL99.... Dzikei za pomoc... -------------------- "Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
[sql:1:ddabecda68]
SELECT topicID, MAX(articleID), author, date, topic FROM forumArticles GROUP BY topicID [/sql:1:ddabecda68] O takie cos chodzi? Cytat Moj serwer to 4.0.35 [...]
A skad go masz?? Z tego co widze z galezi 4.0.x najnowsza wersja jest 4.0.17... -------------------- Brak czasu :/
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 30.03.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wykradlem z tajnych rosyjskich laboratoriow...
![]() A tak naprawde to za szybko zakmnalem shella i zobaczylem piatke na koncu i mi sie cos ubzduralo, a tak naprawde to 4.0.15a. Sorki. I tak to bez roznicy, bo bym musial miec 4.1.x... A co do twojego rozwiazania, to niestety nie to, bo wykonujac to, dostaje: Kod +---------+----------------+--------+------------+---------+
| topicID | MAX(articleID) | author | date | topic | +---------+----------------+--------+------------+---------+ | 1 | 3 | lolo | 2004-01-18 | cos tam | | 2 | 6 | tt | 2004-01-01 | Watek 1 | +---------+----------------+--------+------------+---------+ A to nie jest author, date, topic artykulu o ID 3 (vel 6). On po prostu w tym rozwiazaniu (gdzies kolo 2-giej tez juz na to wpadlem ![]() -------------------- "Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Ha.. no tak... pomylilem sie.. jednak bez subqueries w jednym zapytaniu sie tego nie da zrobic (no da sie.. pisza w manualu o takim jednym triku, ale pisza tez ze jest niewydajny), wiec podaj rozwiazanie w dluzszej wersji:
[sql:1:057d8654c4]create temporary table tmp (articleID int, maks int)[/sql:1:057d8654c4] [sql:1:057d8654c4]LOCK TABLES art READ[/sql:1:057d8654c4] [sql:1:057d8654c4]insert into tmp select articleID, MAX(articleID) from art group by topicID[/sql:1:057d8654c4] [sql:1:057d8654c4]select topicID, autor, data, topic from art inner join tmp on (art.a rticleID = maks)[/sql:1:057d8654c4] [sql:1:057d8654c4]UNLOCK TABLES[/sql:1:057d8654c4] [sql:1:057d8654c4]DROP TABLE tmp[/sql:1:057d8654c4] Oczywiscie musisz wszystkie po kolei zapytania wykonac w jednym polaczeniu z baza. Ostatnie poleceniem ewentualnie mozesz pominac, bo serwer sam usunie tymczasowe tabele jak skonczy sie polaczenie. Za pomoca subqueries (dostepne juz w mysql 4.1) to nie wiem dokladnie, bo nie mam na czym chwilowo sprawdzic,wiec bede strzelal: [sql:1:057d8654c4]select topicID, autor, data, topic from art where articleID = (SELECT MAX(articleID) FROM art GROUP BY topicID)[/sql:1:057d8654c4] -------------------- Brak czasu :/
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 30.03.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
![]() A inne pytanie: czy bardzije mi sie oplaca robic to w ten dlugi sposob (vel jako subqueries), czy lepiej zapisywac po prostu maxid, maxaurthor itd. w tabeli z topicami? I przy kazdej aktualizacji tabeli articles aktualizowac topics? Bo podobno jest mniej zapytan o zapisywanie na wiekszosci stron... Dzieks za odpowiedz. -------------------- "Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 00:26 |