Wyświetlanie tych samych wyników

Witam!

Jak zrobić by skrypt pobierał tylko rekordy gdzie treść jest identyczna w kolumnie.

Chodzi mi o system szukających oszustów. Gdzie są 2 identyczne ip to dane tego użytkownika zostaną mi pokazane. Z góry dziękuje.

Z bazy danych?

Na przykład GROUP BY i wybieranie tych, gdzie ilość jest większa niż 1. Więcej w Google.

Prawdę powiedziawszy nie udało mi się napisać tego przy pomocy GROUP BY tak jak by chciał tego kutar , ale działającą wersję udało mi się uzyskać przy pomocy odpowiedniej perspektywy. Czyli całość wyglądała tak:

CREATE OR REPLACE VIEW ip AS SELECT t.ip, COUNT(*) AS count FROM tabela AS t GROUP BY ip;

a potem tylko w kodzie strony:

SELECT * FROM ip WHERE count>1 ORDER BY count DESC;

w ten sposób dostajesz IP które się powtarzają, a potem wybierasz już tylko odpowiednich użytkowników

Dzięki, nie sprawdzałem, ale mam nadzieje że działa.

A to wymaga modyfikacji w strukturze tabeli?

SELECT * FROM users WHERE count>1 AND ORDER BY login DESC;

To może jeszcze zależeć od bazy danych, działa na pewno na PostgreSQLu, na MySQLu 5.x też powinno działać, MySQL 4.x nie obsługuje widoków (perspektyw) więc nie zadziała w takiej formie.

EDIT:

SELECT * FROM users WHERE count>1 AND ORDER BY login DESC;

zasadniczo, czym jest u Ciebie users? W podanym przykadzie najpierw pokazałem jak utworzyć odpowiedni widok przechowujący informacje o tym ilu użytkowników przypada na jedno ip. Może powiedz coś więcej o strukturze bazy danych to będzie łatwiej.

Tutaj podałem przykład. Poprostu mam bazę z użytkownikami. Skrypt po rejestracji zapisuje ip w odpowiedniej kolumnie. Jeśli jest więcej tych samych ipów pojazuje dane użytkownika.

No i ja również podałem Ci przykład, tworzysz odpowiednią perspektywę, która wybiera poszczególne adresy ip i zlicza krotność ich występowania, i z tej perspektywy wybierasz te wyniki które występują przynajmniej dwukrotnie.

Można jaśniej?

W którym miejscu?

Co to jest perspektywa w php?

Nic, perspektywę tworzy się w bazie danych, to coś w rodzaju wirtualnej tabeli, skłądnie tworzącą odpowiednią perspekyuwę podałem wcześniej:

CREATE OR REPLACE VIEW ip AS SELECT t.ip, COUNT(*) AS count FROM tabela AS t GROUP BY ip;

ale przyznam, że trochę przekombinowałem, jest prostsza metoda… (chociaż teoretycznie może być wolniejsza zdaje się)

SELECT ip, COUNT(*) AS count FROM users GROUP BY ip HAVING COUNT(*) > 1 ORDER BY count DESC;

Czyli w tym

SELECT ip, COUNT(*) AS count FROM users GROUP BY ip HAVING COUNT(*) > 1 ORDER BY count DESC;

Nie muszę twórzyć tych wirtualnych tabel?

Sprawdź jak to działa, to zobaczysz… Nie nie musisz…

Chodziło mi o to co Ty zrobiłeś, tylko bez perspektywy, a z najzwyklejszym mysq_fetch_* i wykonaniu kolejnego zapytania jeśli pole z count() >1 .

No ale oczywiście Twoje rozwiązanie lepsze :slight_smile: