Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wyświetlenie powtarzających się rekordów
Forum PHP.pl > Forum > Przedszkole
tofik1778983
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
Noidea
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.
wiiir
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
tofik1778983
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
Blame
To może podaj treść tego błędu?
melkorm
  1. SELECT ip, count(*) FROM players GROUP BY ip HAVING COUNT (ip) > 1 ORDER BY id


Spacja między drugim COUNT a nawiasami.

tofik1778983
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
wiiir
  1. SELECT ip, user, id, count(*) FROM players GROUP BY ip HAVING COUNT(ip) > 1 ORDER BY id


tutaj masz blad grupowania
Noidea
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
tofik1778983
Właśnie o to mi chodziło. Wielkie dzięki.
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.