theonlychriss
08-03-2002, 17:42
Hallo,
ich stelle mit PHP eine Abfrage an MySQL, die mir Zeilen mit denselben IPs zählen und die häufigste IP (nur die IP, nicht die ganze Zeile) ausgeben soll. Im Moment habe ich mir eine Krücke gebaut, indem ich erst zwei temporäre Tabellen (mit den Namen tmpg und tmp_gesamt) erstelle, dann folgendes ausführe:
# in die Spalte "anzahl" in tmpg wird die Anzahl der IPs eingetragen:
$ip_in_tmpg = "INSERT INTO tmpg SELECT ip, count(ip), datum FROM jahr GROUP BY ip;";
# Das Maximum als Zahl in die tmp_gesamt schreiben
$max_in_tmp_gesamt = "INSERT INTO tmp_gesamt SELECT MAX(anzahl) FROM tmpg;";
Dann kommt:
$ip_aus_tmp_gesamt = "SELECT jahr.ip FROM jahr, tmpg, tmp_gesamt WHERE jahr.ip=tmpg.ip AND tmpg.anzahl=tmp_gesamt.ip LIMIT 1;";
und
$ip_abfrage_gesamt = @mysql_query("$ip_aus_tmp_gesamt");
$ip_gesamt = mysql_fetch_row($ip_abfrage_gesamt);
um die IP, die am häufigsten vorkommt, zu erhalten. Dann werden alle tmp-Tabellen wieder gelöscht.
Tja, spätestens jetzt seht ihr wohl, daß ich noch keine Ahnung von MySQL habe, daher nun die Frage, ob das auch einfacher geht, denn ich habe 3 Tabellen (eine Gesamt- das ist die hier, dann eine für Jahr und eine für Monat) mit jeweils einer zweiten Tabelle für die IP an sich.
Gibt's da einen Trick mit MAX(), den ich nur nicht anwenden konnte (in EINER Abfrage)?
Hoffentlich habe ich das nicht zu konfus formuliert. Falls doch, dann fragt bitte, denn mit diesem Konstrukt wird's echt unübersichtlich. Wenn ich in 2 Monaten noch mal da ran müßte, würde ich bestimmt nichts mehr raffen.
Gruß
Chriss
ich stelle mit PHP eine Abfrage an MySQL, die mir Zeilen mit denselben IPs zählen und die häufigste IP (nur die IP, nicht die ganze Zeile) ausgeben soll. Im Moment habe ich mir eine Krücke gebaut, indem ich erst zwei temporäre Tabellen (mit den Namen tmpg und tmp_gesamt) erstelle, dann folgendes ausführe:
# in die Spalte "anzahl" in tmpg wird die Anzahl der IPs eingetragen:
$ip_in_tmpg = "INSERT INTO tmpg SELECT ip, count(ip), datum FROM jahr GROUP BY ip;";
# Das Maximum als Zahl in die tmp_gesamt schreiben
$max_in_tmp_gesamt = "INSERT INTO tmp_gesamt SELECT MAX(anzahl) FROM tmpg;";
Dann kommt:
$ip_aus_tmp_gesamt = "SELECT jahr.ip FROM jahr, tmpg, tmp_gesamt WHERE jahr.ip=tmpg.ip AND tmpg.anzahl=tmp_gesamt.ip LIMIT 1;";
und
$ip_abfrage_gesamt = @mysql_query("$ip_aus_tmp_gesamt");
$ip_gesamt = mysql_fetch_row($ip_abfrage_gesamt);
um die IP, die am häufigsten vorkommt, zu erhalten. Dann werden alle tmp-Tabellen wieder gelöscht.
Tja, spätestens jetzt seht ihr wohl, daß ich noch keine Ahnung von MySQL habe, daher nun die Frage, ob das auch einfacher geht, denn ich habe 3 Tabellen (eine Gesamt- das ist die hier, dann eine für Jahr und eine für Monat) mit jeweils einer zweiten Tabelle für die IP an sich.
Gibt's da einen Trick mit MAX(), den ich nur nicht anwenden konnte (in EINER Abfrage)?
Hoffentlich habe ich das nicht zu konfus formuliert. Falls doch, dann fragt bitte, denn mit diesem Konstrukt wird's echt unübersichtlich. Wenn ich in 2 Monaten noch mal da ran müßte, würde ich bestimmt nichts mehr raffen.
Gruß
Chriss