Suchabfrage: Spalte X gleich, aber Spalte Y versch.
Ich suche eine Möglichkeit einer bestimmten Suchabfrage in PHPmyAdmin
Ich habe in einer Tabelle, unter anderen, die Spalte "IP" und die Spalte "userid".
Ich will jetzt gerne alle Datensätze angezeigt bekommen in der die IP die selbe ist, der User aber ein anderer.
Beispiel 1 soll nicht ausgegeben werden:
IP 100.100.100.100 User 1111
IP 100.100.100.100 User 1111
Beispiel 2 soll ausgegeben werden:
IP 100.100.100.100 User 1111
IP 100.100.100.100 User 2222
nach Möglickeit noch sortiert nach der Spalte "posttime"
So würde ich gerne Doppelanmeldungen in meinem Forum aufspüren.
Ich hatte gerade einen Fall wo einer die Frauen im Forum belästigt hat, und sich dann mit Fake-Accounts verteidigt hat (der ist ja gar nicht so schlimm, denn kenne ich und der ist nett usw.).
Wie kann ich eine solche Abfrage machen.
Ich bin Newbie und bin nach vielen Versuchen noch auf keine Lösung gekommen, für Hilfe wäre ich sehr dankbar.
Ich habe in einer Tabelle, unter anderen, die Spalte "IP" und die Spalte "userid".
Ich will jetzt gerne alle Datensätze angezeigt bekommen in der die IP die selbe ist, der User aber ein anderer.
Beispiel 1 soll nicht ausgegeben werden:
IP 100.100.100.100 User 1111
IP 100.100.100.100 User 1111
Beispiel 2 soll ausgegeben werden:
IP 100.100.100.100 User 1111
IP 100.100.100.100 User 2222
nach Möglickeit noch sortiert nach der Spalte "posttime"
So würde ich gerne Doppelanmeldungen in meinem Forum aufspüren.
Ich hatte gerade einen Fall wo einer die Frauen im Forum belästigt hat, und sich dann mit Fake-Accounts verteidigt hat (der ist ja gar nicht so schlimm, denn kenne ich und der ist nett usw.).
Wie kann ich eine solche Abfrage machen.
Ich bin Newbie und bin nach vielen Versuchen noch auf keine Lösung gekommen, für Hilfe wäre ich sehr dankbar.
hmm, ich weis nicht ob es funktioniert aber probiers mal aus:
|
|
Quellcode |
1 |
SELECT t1.ip, t1.user, t2.ip, t2.user FROM deinetabell AS t1,deinetabelle AS t2 WHERE t1.ip=t2.ip AND t1.user!=t2.user |
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Zitat
Original von Ninn
Na ja, es kommt zwar keine Fehlermeldung es passiert aber auch nichts.
Der Mauszeiger hat eine halbe Ewigkeit eine Sanduhr und dann wird die Suche vermutlich wegen Zeitüberschreitung abgebrochen.
Ich muß wohl dazusagen das die Tabelle über 30.000 Datensätze hat.
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php
// Hier werden alle Daten fuer den mySQL connect eingegeben
$db_Hostname = "localhost"; // Datenbank-Host (muss nicht zwingend immer localhost sein)
$db_UserName = "root"; // Benutzername fuer diese Datenbank
$db_Password = ""; // Zugehoeriges Passwort
$db_Database = "test"; // Datenbank, auf die zugegriffen werden soll
// Verbindung zur Datenbank
mysql_connect($db_Hostname, $db_UserName, $db_Password) || die("Database Error: Can't Connect to DBMS: ".mysql_error());
mysql_select_db($db_Database)|| die("Database Error: Can't connect to Database") ;
$abfrage = "SELECT DISTINCT(ip) FROM testip ORDER BY ip ASC";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$db_ip[] = $row->ip;
}
$max =count($db_ip);
mysql_free_result($ergebnis);
for($i=0;$i<$max;$i++)
{
$ip =$db_ip[$i];
$abfrage ="SELECT id, ip FROM testip WHERE ip='$ip'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$db_id2[] = $row->id;
$db_ip2[] = $row->ip;
}
mysql_free_result($ergebnis);
$max2 = count($db_ip2);
if($max2 >= 2)
{
for($e=0;$e<$max2;$e++)
{
echo"$db_id2[$e] :-: $db_ip2[$e]<br>";
}
}
$db_id2="";
$db_ip2="";
}
?>
|
so ein kleines PHPScript was bei mir wunderbar funktioniert
Nicht wundern wegen den Variablennamen
musste schnelle gehen. Das einzigste was du anpassen musst sind die SQL Anfragen und die Benutzerdaten damit du zur MySQL DB connecten kannst.
Viel Spaß mit dem neuem Produkt

Greetz
MaxTPayne
€dit: Bei der While Schleife auch die Namen bitte anpassen sonst wird es nicht funktionieren
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »maxtpayne« (9. März 2005, 15:12)
Hallo,
feine Lösung, aber mich würde mal interessieren, ob das nicht ressourcenschonender geht? Weil bei 30.000 Datensätzen 30.001 Abfragen auf die Datenbank geschossen werden.
Könnte man das nicht mit einem
eleganter lösen? Diese Abfrage gibt in einer Abfrage direkt die passenden IP' zurück.
Gruss
Marty
feine Lösung, aber mich würde mal interessieren, ob das nicht ressourcenschonender geht? Weil bei 30.000 Datensätzen 30.001 Abfragen auf die Datenbank geschossen werden.
Könnte man das nicht mit einem
Zitat
SELECT IP, Count(User) FROM (SELECT testip.IP, testip.User FROM testip GROUP BY testip.IP, testip.User) GROUP BY IP HAVING Count(User)>1;
eleganter lösen? Diese Abfrage gibt in einer Abfrage direkt die passenden IP' zurück.
Gruss
Marty
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MartyMcFly« (9. März 2005, 16:53)
Danke erstmal für deine Mühe "maxtpayne"
Das Script funzt soweit, ist aber noch nicht ganz das was ich mir gedacht hatte, so werden ja alle IPs die mehr als einmal vorkommen mit dem zugehörigen User ausgegeben, auch wenn der User pro IP immer der selbe ist.
Das sind noch immer tausende Daten.
Ich hatte mir vorgestellt das nur dann die IPs ausgegeben werden, wenn es die selbe IP aber mit verschiedenen Usern gibt.
Das Script funzt soweit, ist aber noch nicht ganz das was ich mir gedacht hatte, so werden ja alle IPs die mehr als einmal vorkommen mit dem zugehörigen User ausgegeben, auch wenn der User pro IP immer der selbe ist.
Das sind noch immer tausende Daten.
Ich hatte mir vorgestellt das nur dann die IPs ausgegeben werden, wenn es die selbe IP aber mit verschiedenen Usern gibt.
Zitat
Original von Ninn
Danke erstmal für deine Mühe "maxtpayne"
Das Script funzt soweit, ist aber noch nicht ganz das was ich mir gedacht hatte, so werden ja alle IPs die mehr als einmal vorkommen mit dem zugehörigen User ausgegeben, auch wenn der User pro IP immer der selbe ist.
Das sind noch immer tausende Daten.
Ich hatte mir vorgestellt das nur dann die IPs ausgegeben werden, wenn es die selbe IP aber mit verschiedenen Usern gibt.
Ok mach ich gleich fertig

Greetz
MaxTPayne
Zitat
Original von MartyMcFly
Hallo,
was gefällt Euch an meiner Abfrage nicht? Die liefert doch genau das.
Gruss
Marty
nicht wirklich da deine Lösung nicht funktionieren kann da du im Subselect ein GROUP BY verwendest obwohl du ihm Subselect selber keine Agregatsfunktion benutzt und auch wenn man das ändert hat sie bei mir nicht funktioniert.
So hier ist meine neue Lösung (so wie es seien soll
):|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php
// Hier werden alle Daten fuer den mySQL connect eingegeben
$db_Hostname = "localhost"; // Datenbank-Host (muss nicht zwingend immer localhost sein)
$db_UserName = "root"; // Benutzername fuer diese Datenbank
$db_Password = ""; // Zugehoeriges Passwort
$db_Database = "test"; // Datenbank, auf die zugegriffen werden soll
// Verbindung zur Datenbank
mysql_connect($db_Hostname, $db_UserName, $db_Password) || die("Database Error: Can't Connect to DBMS: ".mysql_error());
mysql_select_db($db_Database)|| die("Database Error: Can't connect to Database") ;
$abfrage = 'SELECT DISTINCT (id), count(ip)
FROM testip
WHERE ip>2
GROUP BY id
ORDER BY id ASC ';
$ergebnis = mysql_query($abfrage);
while ($row = mysql_fetch_array($ergebnis, MYSQL_ASSOC))
{
if($row["count(ip)"]>=2)
{
echo"<b>ID: ";
echo$row["id"];
echo"</b><br>";
}
}
?>
|
Zitat
Original von maxtpayne
Zitat
Original von MartyMcFly
Hallo,
was gefällt Euch an meiner Abfrage nicht? Die liefert doch genau das.
Gruss
Marty
nicht wirklich da deine Lösung nicht funktionieren kann da du im Subselect ein GROUP BY verwendest obwohl du ihm Subselect selber keine Agregatsfunktion benutzt und auch wenn man das ändert hat sie bei mir nicht funktioniert.
Tja, scheint so als ginge es in Access aber nicht in mySQL.
Gruss
Marty
Zitat
Original von MartyMcFly
Zitat
Original von maxtpayne
Zitat
Original von MartyMcFly
Hallo,
was gefällt Euch an meiner Abfrage nicht? Die liefert doch genau das.
Gruss
Marty
nicht wirklich da deine Lösung nicht funktionieren kann da du im Subselect ein GROUP BY verwendest obwohl du ihm Subselect selber keine Agregatsfunktion benutzt und auch wenn man das ändert hat sie bei mir nicht funktioniert.
Tja, scheint so als ginge es in Access aber nicht in mySQL.
Gruss
Marty
Access ist auch pervers und ekelig

Greetz
MaxTPayne



