Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane zapytanie mysql, grupowanie
peszek07
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 20.09.2010

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


Witam, mam problem ze sformułowaniem zaptyania do bazy, które pogrupowałoby mi rekordy

mam taką tablice
ID | nick | potwor | lokacja | time()
-----------------------------------------------
1 | nick1 | potwor1 | lokacja1 | 1373657480
2 | nick2 | potwor1 | lokacja1 | 1373657549
3 | nick3 | potwor1 | lokacja1 | 1373657583
4 | nick4 | potwor1 | lokacja1 | 1373657614
5 | nick5 | potwor2 | lokacja2 | 1373658053
5 | nick6 | potwor3 | lokacja3 | 1373658988
7 | nick7 | potwor4 | lokacja4 | 1373659495
8 | nick8 | potwor3 | lokacja3 | 1373659611
9 | nick9 | potwor2 | lokacja5 | 1373659657
10 | nick9 | potwor2 | lokacja5 | 1373660488
11 | nick1 | potwor5 | lokacja6 | 1373661019
12 | nick10 | potwor6 | lokacja7 | 1373661698
13 | nick10 | potwor6 | lokacja7 | 1373661885

Chodzi mi o to, żeby zgrupowac rekordy, które posiadają taką samą nazwę potwora i lokację w przedziale czasu 10 minut, na dodatek chciałbym otrzymać nicki grzczy w takim schemacie np. nick1*nick2*nick3 (wiem że trzeba zastosować GROUP_CONCATE, ale głównie chodzi mi o łączenie tych rekordów w tym przedziale czasowym)
Potwory mogą mieć różne lokacje oraz potwora może zabić inny użytkownik, bądź zgrupować się z innym.

Z góry dzięki za pomoc smile.gif

Ten post edytował peszek07 12.08.2013, 20:37:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
cfk
post
Post #2





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 8.01.2005
Skąd: Warszawa

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


a nie wystarczy group by i having w którym dasz warunek na czas?
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


A ja bym w ogóle zrezygnował tu z grupowania. Nie stosujesz żadnych statystyk na tych grupach, a na dodatek, jak sam mówisz, potrzebujesz te nicki. Zrób zwykły SELECT posortowany po nickach, a wyniki obrób w samej aplikacji.
Go to the top of the page
+Quote Post
peszek07
post
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 20.09.2010

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


Zrobiłbym to w aplikacji, tylko wtedy będzie problem znowu z dzieleniem na strony ;/
A to co kolega wyżej proponował niestety nie działa, bo się nie powtarzają potwory niestety, a tego oczekuję ;/
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


to bedzie wygladać mniej wiecej tak:
  1. SELECT t1.potwor, t1.lokacja, group_concat(DISTINCT t2.nick) FROM tabela t1 LEFT JOIN tabela t2 ON t1.potwor=t2.potwor AND t1.lokacja=t2.lokacja AND t2.`time`<=t1.`time`+100 GROUP BY 1,2

Go to the top of the page
+Quote Post
SmokAnalog
post
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


A tak w ogóle to potwory i lokacje powinny być w osobnych tabelach 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 Aktualny czas: 20.08.2025 - 20:58