anzeige doppelter ip´s

HoB

HoB
ID: 79596
L
22 April 2006
2.521
74
hi.. nochmal ich..

ich habe folgende anzeige der ip´s gemacht..

$sql1=mysql_query("SELECT ip FROM mt_user ORDER BY ip");
echo mysql_error();
while($ip=mysql_fetch_array($sql1))
{
echo "<b><font color='blue'>$ip[0]<br></font></b> ";
}
echo "</center>";

nun hätte ich aber gerne, daß man nur die doppelten, oder eben gleiche ip´s sieht.. geht das? wenn ja, wie?
 
Schau mal im Manual unter "GROUP BY" nach...

Code:
SELECT ip, COUNT(*) AS anzahl FROM mt_user HAVING anzahl > 1 ORDER BY ip
 
ohne das mit error zu machen, kommt folgende meldung..

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /index2.php on line 243
 
hmmm... das scheint sich echt zu beissen..

<?php
require("../config/config.php");
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
mysql_select_db($dbname,$db) or die(mysql_error());
$sql1=mysql_query("SELECT ip, COUNT(*) AS anzahl FROM mt_user HAVING anzahl > 1 GROUP BY ip");
echo mysql_error();
while($ip=mysql_fetch_array($sql1))
{
echo "<b><font color='blue'>$ip[0]<br></font></b> ";
}
echo "</center>";
?>

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY ip' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /index2.php on line 243
 
Ist es denn so schwer, ins Manual zu gucken, wenn mal jemand (in diesem Fall ich, und das tut mir sehr leid, bestätigt mich aber in der Auffassung, lieber nur Manual-Links statt Codes zu posten) nicht ganz richtigen Code postet?

https://dev.mysql.com/doc/refman/5.0/en/select.html
13.2.7. SELECT Syntax

Code:
SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr, ...
    [FROM table_references
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [INTO OUTFILE 'file_name' export_options
      | INTO DUMPFILE 'file_name'
      | INTO @var_name [, @var_name]]
    [FOR UPDATE | LOCK IN SHARE MODE]]
Die Reihenfolge ist wichtig!
Code:
SELECT ip, COUNT(*) AS anzahl FROM mt_user GROUP BY ip HAVING anzahl > 1 ORDER BY ip

Praktisch denselben Code bekommt man frei Haus geliefert, wenn man bei phpMyAdmin bei der Tabellenstruktur-Anzeige in der Zeile zur gesuchten Spalte (hier "ip") auf das erste Icon klickt ("Zeige nur unterschiedliche Werte"), da kommt raus:
Code:
SELECT COUNT( * ) AS `Zeilen` , `ip`
FROM `mt_user`
GROUP BY `ip`
ORDER BY `ip`
LIMIT 0 , 30

Hoffe, diesmal geholfen zu haben...
 
sry hab nicht bedacht, dass man mit mysql_query() nur ein statement an den server senden kann.

ansonsten die abfrage mit select distinct und dann die differenz mit der gesamten.

wäre für anfänger vl schlüssiger, aber funzt ja in php leider nicht.

sry.

jperl
 
mysqli kan das, aber es ergibt überhaupt keinen sinn, ein query der effizent ist ersetzen durch dutzende querys?
 
da wiederspreche ich dir in keiner weise.

jperl

ps: wie stehts eigentlich mit der effizienz von SELECT COUNT(*) wird das mysql intern so wie z.Bsp. SELECT COUNT(ip) gehandhabt? oder braucht das mehr ressourcen?
würde mich interessieren.
 
Zuletzt bearbeitet:
COUNT(*) dürfte MySQL-intern effizienter sein als COUNT(column), da es nur die Anzahl der Zeilen zurückgibt und nicht noch zusätzlich auf NULL-Werte prüft.
 
klingt plausibel.

jperl

ps: ich war mal so frei, meinen peinlichen verschreiber zu editieren.