![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Nie wiedziałem jak dokładnie temat nazwać, bo jest dosyć skomplikowany... Otóż mam dwie tabele: 'characters' i 'accounts'. W tabeli 'characters' mam kolumnę 'online', a w tabeli accounts 'lastip'. Zmiana tabel nie wchodzi w grę. I teraz o co się rozchodzi: 1) Trzeba pobrać wszystkie wpisy z 'characters', które posiadają wartość '1' w 'online' - proste. 2) Następie pobrać wszystkie wpisy z tabeli 'accounts' na podstawie zmiennej z 'characters' - proste. 3) I tutaj zaczynają się schody... Trzeba pogrupować wyniki z 'accounts' na podstawie 'lastip' w grupy - nie wiem jak to wykonać, bo 'lastip' znajduje się w 'accounts'. 4) Dalej to już listowanie na stronie wyników w grupach, więc to będzie proste... Nie mam pojęcia jak rozwiązać pkt 3 i tutaj moja prośba o pomoc. Jakąkolwiek... Pozdrawiam i z góry dziękuję. Ten post edytował kuzdo 9.08.2010, 13:59:51 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 11 Dołączył: 2.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jakbyś mi jeszcze powiedział co to dokładnie robi (IMG:style_emoticons/default/tongue.gif)
SELECT a.* - rozumiem że pobranie wszystkich danych ale po co te 'a.'? FROM accounts a - pobranie z accounts i nadanie aliasu 'a' ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 11 Dołączył: 2.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
SELECT a.* pobiera wszystkie dane z accounts bo zrozumiałem, że właśnie tylko te dane chcesz. jeśli mają być wszystkie (z tabeli characters też) to olej to 'a.'
I tak - 'a' to po prostu alias nadany przy FROM accounts a. Możesz nazwać to inaczej ew. używać pełnych nazw tabel (IMG:style_emoticons/default/smile.gif) ------------ [edit] JOIN A co robi napisany wcześniej kod? Łączy dwie tabele, pobiera z nich dane (które chcesz - w moim kodzie pobiera tylko te z accounts jak zauważyłeś) , z warunkiem, że muszą być online, a następnie grupuje po lastid. Ten post edytował toel 9.08.2010, 14:23:02 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Aha rozumiem. Ale teraz inna sprawa, która mi się przypomniała, bo już chciałem to sprawdzać (IMG:style_emoticons/default/haha.gif) Nie można tak tego łączyć bo obie tabele są w osobnych bazach, na osobnych maszynach...
Więc jest połączenie $link1 do accounts i $link2 do characters... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 11 Dołączył: 2.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
No to może zrób w ten sposób:
(raczej średnio wydajne, ale może Ci wystarczy, dopóki, ktoś nie podrzuci innego rozwiązania (IMG:style_emoticons/default/winksmiley.jpg) ) Najpierw pobierz z tabeli characters do jednej zmiennej wszystkie ID łączące tabele i oddziel je przecinkami (dajmy na to zmienna nazywa się $ids) Następnie wykonaj takie zapytanie
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dobra, doszedłem już do czegoś, według tego co podałeś, ale teraz mam inny problem.
Zapytanie wygląda tak:
I przy listowaniu tego na stronie, podawany jest tylko pierwszy wpis kolumny login. Więc jeżeli są przykładowo 4 wpisy z tym samym lastIP, ale o loginach damian, daniel, adam, kasia, to zostanie wyświetlony tylko pierwszy wpis... Reszta jest pomijana... Co zrobić? Ten post edytował kuzdo 10.08.2010, 18:05:29 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki (IMG:style_emoticons/default/biggrin.gif) Ja już kombinowałem z GROUP_CONCAT(`login`) itp. a tu takie proste rozwiązanie (IMG:style_emoticons/default/haha.gif) Nawet o tym nie pomyślałem...
Ale teraz w sumie mam inny problem :/ Przykładowo dostaje takie dane: Kod account | lvl | lastIP | pcIP ------------------------------------------------------- konto1 | 0 | 111.111.11.11 | 192.168.1.2 | konto2 | 0 | 111.111.11.11 | 192.168.1.2 | konto3 | 0 | 111.111.11.11 | 192.168.1.3 | innekonto | 0 | 222.222.22.22 | 192.168.1.2 | kontoinne | 0 | 333.333.33.33 | 192.168.1.2 | jakies | 0 | 444.444.44.44 | 192.168.1.2 | test1 | 0 | 555.555.55.55 | 192.168.2.3 | test2 | 0 | 555.555.55.55 | 192.168.2.3 | I na stronie chce je wypisać w pewien specyficzny sposób, otóż miałaby to być tabela w której tylko raz pojawiałoby się dane lastIP, a obok niego wszystkie wpisy z tego IP. Wiem, że muszę to zrobić, przez porównywanie jednego wpisu z drugim, ale nie wiem jak zacząć i jak przeskakiwać do kolejnego IP... Ten post edytował kuzdo 11.08.2010, 22:49:18 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
No w takiej sytuacji to GROUP_CONCAT nie jest takie głupie - miałbyś od razu wszystkie loginy oddzielone przecinkami i po jednym IP na wiersz. Ale jeśli z jakichś powodów to niemożliwe, to możesz zrobić w taki sposób:
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki, powinienem piwo postawić, ale nie mam jak (IMG:style_emoticons/default/haha.gif)
Mam tylko jedno pytanie: Co to za operator porównania: Kod ($prevIp <> $row['lastIP']) On działa, ale ja go nie znam (IMG:style_emoticons/default/haha.gif) Pierwszy raz taki widzę... Ten post edytował kuzdo 12.08.2010, 07:14:37 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
http://pl2.php.net/manual/en/language.oper....comparison.php
Ale i tak przepraszam - za dużo ostatnio grzebię w SQL i mi się pomieszało. W twoim skrypcie lepszym operatorem będzie !== (not identical). |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze mały problem... Co mam zrobić, jeżeli kolumn ma być więcej... W tym momencie "echo <br>" psuje tabelę...
Chciałbym uzyskać taki efekt i nie wiem teraz jak to rozwiązać. http://img843.imageshack.us/img843/5867/tabelax.png |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
No to zmieniamy taktykę, pierwsza pętla:
No i druga:
Ten post edytował skarabe.pl 12.08.2010, 19:30:10 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ooo wielkie dzięki (IMG:style_emoticons/default/biggrin.gif) Teraz już wszystko jest cacy (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 17:46 |