PHP MYSQL wyświetlenie multikont o takim samym IP

0

Hej,
bardzo proszę doświadczonych kolegów o pomoc :)

Mam bazę danych mysql z tabelą o nazwie users - w niej mam oprócz oczywistych kolumn jak login, haslo, email - kolumnę IP - i teraz chciałbym sobie na swojej stronie wyrzucić wszystkie konta o takim samym ip, aby dowiedzieć się czy są konta logujące się z tego samego.

Załóżmy, że mam konta:

LOGIN, IP
Janek 10.0.0.20
Beata 50.50.50.50
Ela 10.0.0.20
Julka 10.0.0.0
Kamil 50.50.50.50
Agnieszka 5.5.6.20

Więc chciałbym, żeby echo wyrzuciło mi:

Janek 10.0.0.20
Ela 10.0.0.20
Beata 50.50.50.50
Kamil 50.50.50.50

Za Chiny nie potrafię sobie tego wyrzucić selectem...
Liczę na Was panowie :)

Pozdrawiam.

1

Możesz np zrobić podzapytanie w którym otrzymasz ilość wystąpien danego IP czyli korzystasz z funkcji count i grupowania po kolumnie IP. Dzięki temu otrzymasz wyniki np
10.0.0.1 | 1
10.0.0.20 | 2
Potem dorzucasz warunek do tego grupowania (zobacz jak to się robi w przypadku pogrupowanych wyników) w którym określisz że ilość wystąpien musi być większa niż 1.

Tak skonstruowane zapytanie wykorzystujesz jako podzapytanie już we właściwym zapytaniu i voila masz wyniki.

0

Wiem, że wyjdę w tym momencie na nooba..
Ale przerobiłem od wczoraj tyle tych zapytań.. z countami i bez posiłkując się wujkiem google...
Na prawdę poświęciłem z 4 godziny bez skutku i dlatego postanowiłem poprosić o pomoc tutaj..
Czy mogę liczyć na gotowca?
Będę mega wdzięczny

@Patryk27 - zbyt wiele tego było, żeby przytaczać..
Najlepszym wynikiem było coś w rodzaju:
1Janek

gdzie 1 to num_rows...
Wyskakiwał 1 wynik i to wgl fartem..
Mega zależy mi, żeby to dzisiaj pokonać : p

0

Hej,
mogę liczyć na Waszą pomoc? :)

0
		$mc = $polaczenie->query("SELECT * FROM users WHERE ip IN (SELECT * FROM users WHERE ip)");
		if ($mc->num_rows > 0){
			while($mcc = $mc->fetch_assoc()){
				echo $mcc['login'];
			}
		}else{
			echo"Nie ma żadnych MC";
		}

I oczywiście to nie działa :/

0

A widzisz chociaż jakie masz tam zapytanie i jaki ma ono sens? Wychodzi na to ze nie znasz SQL - wiec poszukaj informacji o funkcjach agregujacych, o grupowaniu i zapytaniach skorelowanych. Ogólnie temat wygląda mi na początek semestru i pierwsze zajęcia z baz danych.

0

Kolego, naprawde nie napisalem tutaj po to zebys mnie utwierdzal w tym, ze jestem cienki bolek, bo to wiem..
Napisalem tutaj, zeby skorzystac z Waszego doswiadczenia i checi pomocy, bo zapewne jest tu jakis wyjadacz, ktory nie bedzie sie na mnie wyzywal tylko napisze mi w minute gotowe zapytanie.

1

Więc nie przyszedłeś po pomoc, ale po gotowca. Ale lepiej bylody zamiast się wkurzać przeczytać to co napisał @axelbest w pierwszej odpowiedzi i spróbować zastosować...

1

Mam dzisiaj dobry nastrój to dam Ci tego gotowca:

Wersja @axelbest

select
    *
from 
    u
where 
ip in (select  
             ip
        from
             u
        group by
            ip
        having
           count(*) > 1)

Lub trochę inna:

select
    ip
    ,count(*) ile_loginow
    ,group_concat(login separator ', ') Loginy
from
   u
group by
    ip
having
     count(*) > 1;

http://sqlfiddle.com/#!9/b3d540/3

0

Hej,
zacząłem od wypróbowania/obrobienia kodu nr 2, ale wyświetlił pustkę.
Za to kod nr 1 po odpowiednim obrobieniu dał mi wynik, którego oczekiwałem :).
Temat do zamknięcia, a Tobie @Panczo serdecznie dziękuję za pomoc.

Pozdrawiam, MK.

0

Nie mam nic mądrego do powiedzenia poza jednym:

Zbliżone IP, czy takie same nie oznaczają, że to jest ten sam użytkownik.
Przemyśl to , nim zaczniesz bezmyślnie banować.

0

Hej, dzieki za info..
To narzedzie ma sluzyc zwroceniu uwagi na poszczegolne konta, a nie autoban :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1