Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Problem z GROUP BY
Forum PHP.pl > Forum > Przedszkole
Skie
Witam,
mam problem dosyć często spotykany, przeczytałem mnóstwo tematów z tym związanych a jednak dalej nie wiem co jest źle. Mianowice robie plik, który wypisuje listę userów z bazy, u których powtórzyło się IP. Robię to w ten sposób:

Kod
SELECT id, ip, user FROM users GROUP BY ip HAVING count(*) > 1 ORDER BY id;


Niestety takie coś zwraca mi jedynie listę potwórzonych ip, czyli np:

127.0.0.1
50.0.50.0

(takie wpisałem do bazy dla testów). A chciałbym żeby zamiast tego tak to wyglądało:

user1 (127.0.0.1)
user2 (127.0.0.1)
user5 (50.0.50.0)
user24 (50.0.50.0)
Darti
  1. SELECT COUNT( * ) AS `Rekordów` , `id`, `ip`, `user`
  2. FROM `users` GROUP BY `ip`
  3. ORDER BY `id`ASC
Skie
Tak, ale ten sposób zrobi dokładnie to co poprzedni. Wyświetli jedynie pierwszy rekord dla każdego powtarzającego się IP.

Kod
SELECT user, id, COUNT(*) AS ip FROM users GROUP BY ip HAVING ip > 1 ORDER BY id;


Może dla wyjaśnienia podam wygląd tabali users i co chce uzyskać:

id | user | ip
1 | user1 | 127.0.0.1
2 | user2 | 0.0.0.0
3 | user3 | 50.0.50.0
4 | user4 | 127.0.0.1
5 | user5 | 50.0.50.0

Chce pobrać powtarzające się rekordy, czyli w tym przypadku rekordy o ID:
1, 3, 4, 5

Niestety oba przypadki (ten w tym poście i w moim poprzednim) zwracają jedynie po jednym rekordzie dla danego IP, czyli:
1, 3
thm
czary mary:
  1. SELECT u2.* FROM users AS u1 JOIN users AS u2 WHERE u1.id != u2.id AND u1.ip = u2.ip
nevt
  1. SELECT * FROM `users` LEFT JOIN (SELECT `ip`, count(`ip`) AS `ile` FROM `users` GROUP BY `ip`) AS `tmp` USING(`ip`) WHERE `ile` > 1;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.