![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam tabelę (w przybliżeniu):
Chciałbym wyciągnąć ostatnich 10 rekordów sortując po comment_date DESC, ale żeby comment_item się nie powtórzyło. Niestety, GROUP BY comment_item psuje całe sortowanie (bierze pierwszą napotkaną datę). Wymyśliłem takie coś, ale nie jestem pewien złożoności obliczeniowej, która jest pewnie ogromna:
Katuję bazę danych? SELECT DISTINCT rozwiązałby mój problem? Jakbym musiał wówczas ułożyć optymalne zapytanie? Ponoć DISTINCT wydajniejsze od ewentualnego GROUP BY Cytat When combining LIMIT row_count with DISTINCT, MySQL stops as soon as it finds row_count unique rows. Z góry dzięki za odpowiedzi, Athlan. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Nie jestem pewien czy zadziała ale można spróbować.
Nie zajedziesz bazy jak będziesz mieć index na polach (comment_item, comment_date) w takiej kombinacji. Ten post edytował wookieb 24.12.2010, 22:28:39 |
|
|
![]()
Post
#3
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Gitara gra. MAX() działa dzięki GROUP - otrzymuję te same wyniki, co moim sposobem, który jest trywialny i rozłożony na czynniki pierwsze. Taki indeks już mam, więc jest w użyciu po EXPLAIN'ie.
Ale nie jestem pewien, czy się to czymś różni. W zasadzie rozpisałem MAX() na części pierwsze, stąd wynik powinien być taki sam. Ufam jednak mechanizmom bazy danych. Propsy : ) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 22:57 |