Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Wyświetlenie powtarzających się rekordów
tofik1778983
post 9.09.2010, 16:35:34
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 1
Dołączył: 22.11.2007
Skąd: lbn

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


Witam.
Mam w bazie tabele players tam dużo różnych kolumn.
Chciałbym dodać opcje sprawdzającą czy nie ma multikonta po adresie ip oraz wyświetlić id gracza, nazwe i ip..
Jak to zrobić questionmark.gif
tabela: players
kolumny do wyswietlenia: id, user, ip
w kolumnie "ip" są adresy
Chciałbym aby wyświetlało tylko graczy o powtarzającym się adresie ip


--------------------
Go to the top of the page
+Quote Post
Noidea
post 9.09.2010, 16:47:09
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Powtarzające się IP to:
  1. SELECT ip
  2. FROM players
  3. GROUP BY ip
  4. HAVING COUNT( ip ) > 1


Połącz sobie to teraz joinem po IP z zapytaniem pobierającym user, id, itp.

Ten post edytował Noidea 9.09.2010, 16:47:24


--------------------
Go to the top of the page
+Quote Post
wiiir
post 9.09.2010, 16:49:21
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


tak na sucho napisalem ale powinno zadzialac
  1. SELECT ip, count(*)
  2. FROM players
  3. GROUP BY ip
  4. HAVING count(*) > 1
  5. ORDER BY id


Ten post edytował wiiir 9.09.2010, 16:53:29
Go to the top of the page
+Quote Post
tofik1778983
post 9.09.2010, 17:29:49
Post #4





Grupa: Zarejestrowani
Postów: 144
Pomógł: 1
Dołączył: 22.11.2007
Skąd: lbn

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


Ok dzieki za szybką odpowiedz.
A jak to poprawie wyświetlić bo zrobiłem coś takiego
Kod
$wykonaj = mysql_query("SELECT ip, count(*) FROM players GROUP BY ip HAVING COUNT (ip) > 1 ORDER BY id")
or die('Błąd zapytania');

echo '<table cellpadding="2" border=1><tr><td width="50px">Id</td><td width="150px">Nik</td> <td width="150px">Ip</td>';
while($x=mysql_fetch_array ($wykonaj)) {
echo ' <tr>
<td width="50px">'.$x['id'].'</td>
<td width="150px">'.$x['user'].'</td>
<td width="150px">'.$x['ip'].'</td>';
}
echo'</tr></table>';

Wywala mi błąd zapytania czyli w zapytaniu coś nietego..questionmark.gif

Ten post edytował tofik1778983 9.09.2010, 17:31:11


--------------------
Go to the top of the page
+Quote Post
Blame
post 9.09.2010, 18:26:27
Post #5





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


To może podaj treść tego błędu?


--------------------
Go to the top of the page
+Quote Post
melkorm
post 9.09.2010, 18:37:28
Post #6





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  1. SELECT ip, count(*) FROM players GROUP BY ip HAVING COUNT (ip) > 1 ORDER BY id


Spacja między drugim COUNT a nawiasami.



--------------------
Go to the top of the page
+Quote Post
tofik1778983
post 9.09.2010, 18:49:28
Post #7





Grupa: Zarejestrowani
Postów: 144
Pomógł: 1
Dołączył: 22.11.2007
Skąd: lbn

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


Cytat
or die('Błąd zapytania');
taki błąd..
Zapytanie wyświetla adres który się powtarza więc jest ok..
Ale pomóżcie zmodyfikować ten fragment kodu który dałem tak aby wyświetlał wszystkie adresy ip które występują więcej jak raz.
Teraz wyswietla tylko jeden (ten pierwszy) z powtarzających się.
  1. $wykonaj = mysql_query("SELECT ip, user, id, count(*) FROM players GROUP BY ip HAVING COUNT(ip) > 1 ORDER BY id")
  2. or die('Błąd zapytania');
  3.  
  4. echo '<table cellpadding="2" border=1><tr><td width="50px">Id</td><td width="150px">Nik</td> <td width="150px">Ip</td>';
  5. if(mysql_num_rows($wykonaj) > 0) {
  6. while($x=mysql_fetch_array ($wykonaj)) {
  7. echo ' <tr>
  8. <td width="50px">'.$x['id'].'</td>
  9. <td width="150px">'.$x['user'].'</td>
  10. <td width="150px">'.$x['ip'].'</td>';
  11. }
  12. echo'</tr></table>';
  13. }
  14.  

Chyba coś takiego ale pewnie trzeba coś zmienić w zapytaniu questionmark.gif

Ten post edytował tofik1778983 9.09.2010, 18:55:37


--------------------
Go to the top of the page
+Quote Post
wiiir
post 10.09.2010, 07:28:30
Post #8





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


  1. SELECT ip, user, id, count(*) FROM players GROUP BY ip HAVING COUNT(ip) > 1 ORDER BY id


tutaj masz blad grupowania
Go to the top of the page
+Quote Post
Noidea
post 10.09.2010, 11:10:59
Post #9





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Chodziło mi o użycie tego jako podzapytania w zapytaniu wyciągającym id, user:
  1. SELECT p1.id, p1.user, p1.ip, p2.count
  2. FROM players p1
  3. JOIN (
  4. SELECT ip, COUNT( ip ) AS count
  5. FROM players
  6. GROUP BY ip
  7. HAVING count > 1
  8. ) p2 ON ( p1.ip = p2.ip )
  9. ORDER BY p1.ip
pisane z palca, mogą być literówki


Zapytanie jakie podał wiiir też może być, może nawet byłoby lepsze w tym przypadku, ale wartości id i user musisz połączyć przy użyciu GROUP_CONCAT(), a później w PHP rozbić je sobie funkcją explode


--------------------
Go to the top of the page
+Quote Post
tofik1778983
post 21.09.2010, 11:19:06
Post #10





Grupa: Zarejestrowani
Postów: 144
Pomógł: 1
Dołączył: 22.11.2007
Skąd: lbn

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


Właśnie o to mi chodziło. Wielkie dzięki.


--------------------
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 Wersja Lo-Fi Aktualny czas: 21.06.2025 - 12:19