![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Bardzo prosty problem.
Mamy tabelę z wiadomościami - id odbiorcy i id wysyłającego. Chcę stworzyć listę konwersacji czyli po jednej wiadomości z każdej konwersacji. 1 | 2 1 | 2 1 | 3 3 | 1 2 | 1 Wynik oczekiwany dla useraID: 1 - po jednej, ostatniej wiadomości z każdej rozmowy. 2|1 1|3 Niby proste ale wszystkie moje wariacje SELECTa zwracają ładnie po jednej wiadomości ale dla rozmów gdzie była odpowiedź zwraca 2 wiersze 1|2 i 2|1 traktując to jako osobne rozmowy. Jedna z prób:
Jak wytłumaczyć bazie że 1|2 to dla mnie to samo co 2|1 i nie chcę aby się powtarzało? Inna próba z takim samym rezultatem:
Ten post edytował markonix 16.11.2013, 23:21:45 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ok, w końcu zrozumiałem o co tak naprawdę chodzi (IMG:style_emoticons/default/smile.gif)
Zapytanie bez IF i CONCAT będzie bardziej "eleganckie": Warto pamiętać, że grupowanie po "sztucznych" kolumnach nie korzysta z indeksów i jeśli to zapytanie ma być często wykonywane, może warto rozważyć dodanie kolejnej kolumny do tabeli (+odpowiednie indeksowanie). Jestem też prawie pewien, że bez ruszania tabeli da się to zrobić lepiej, ale nie mam ostatnio za dużo wolnego czasu, żeby się bardziej przyjrzeć (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 21:09 |