![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
Witam,
w jednym zapytaniu potrzebuję pobrać kilka ostatnich wiadomości z bazy danych. Struktura jest dość normalna, czyli: ID, ID_Odbiorcy, ID_Wysylajacego, Data, Typ, Tresc, ID_Konwersacji. Problem w tym, że wiadomości mogą mieć zarówno nadany ID_Konwersacji jak i nie. W przypadku gdy jest nadany ten indeks (który może się powtarzać), chcę pobrać tylko OSTATNIĄ wiadomość (czyli z najwyższym ID) z takim ID_Konwersacji, a resztę wiadomości (bez ID_Konwersacji) pobieram normalnie. Czy coś takiego jest do zrobienia bez dużej utraty wydajności zapytania? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 25 Dołączył: 29.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
po 1 pobierasz z bazy 5 ostatnich id a nastepnie w tym sprawdzasz czy takie cos istnieje
o to ci chodzi (IMG:style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli dobrze rozumuję, to powinieneś osiągnąć to za pomocą ORDER BY i GROUP.
Edit: na pewno nie idź, w kierunku w tym co pokazuje Ruch Radzionków. Ten post edytował Rysh 21.06.2012, 22:27:36 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
po 1 pobierasz z bazy 5 ostatnich id a nastepnie w tym sprawdzasz czy takie cos istnieje
o to ci chodzi (IMG:style_emoticons/default/questionmark.gif) Zapytania w pętli? Nie dziękuje, to się źle skończy (IMG:style_emoticons/default/smile.gif) Chcę, aby było jak najmniej zapytań, i tak żebym minimalnie musiał zmieniać główne, żeby nie rozwalić stronicowania, ani nie mieć takich sytuacji, że pobieram 20 wiadomości, ale wyświetlę tylko 10 bo niektóre odrzuce. Jeżeli dobrze rozumuję, to powinieneś osiągnąć to za pomocą ORDER BY i GROUP. Problem w tym, jak to pogodzić w jednym zapytaniu? Ten post edytował smietek 21.06.2012, 22:27:50 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
Tu może być ciężko, może któryś z wyjadaczy forumowych Ci podpowie - bo ja pomysłu nie mam (a raczej doświadczenia).
Bo jeśli pogrupujesz wg. ID_Konwersacji to zgrupuje Ci również pozycję w których == NULL, a Ty nie chcesz tych pozycji grupować. Ten post edytował Rysh 21.06.2012, 22:33:39 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
Tu może być ciężko, może któryś z wyjadaczy forumowych Ci podpowie - bo ja pomysłu nie mam (a raczej doświadczenia). Bo jeśli pogrupujesz wg. ID_Konwersacji to zgrupuje Ci również pozycję w których == NULL, a Ty nie chcesz tych pozycji grupować. Jest jeszcze możliwość pobrania w subquery najwyższego ID dla danego ID_Konwersacji, ale mam już jedno takie zapytanie (co prawda bardzo rzadko odpalane, dlatego je zostawiłem) i po nim widzę, że nie jest ono zbyt optymalnie zbudowane. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
BTW: możesz mi wytłumaczyć do czego to by miało służyć? Bo nie rozumiem Twojego zamysłu (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
BTW: możesz mi wytłumaczyć do czego to by miało służyć? Bo nie rozumiem Twojego zamysłu (IMG:style_emoticons/default/smile.gif) Łączenie konkretnych rozmów między użytkownikami w wątki - wyświetlam tylko ostatnią wiadomość z wątku, a jeśli użytkownik chce zobaczyć resztę, to klika "rozwiń" i ładuję mu cały wątek przez AJAXa. I już chyba wpadłem na pomysł jak to rozwiązać, ale będzie do tego potrzebne dodatkowe pole. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 23:48 |