如何在mysql表中添加重复记录的数字


How do you append a number for duplicate records in a mysql table?

我认为这个解决方案很简单,当然它让我很困惑。

我有两个表,并将它们连接到具有相同值的字段:

示例记录:

art0001,
art0001,
art0001,
art0002,
art0002,
art0003

我要做的是添加一个数字来计算每个重复的数量,并像这样回显它:

art0001-1,
art0001-2,
art0001-3
art0002-1,
art0002-2,
art0003-1

我想出了这段代码,但是输出只是添加了一个数字,但是当发现新的重复时不重新启动。

$query = mysql_query( "SELECT * FROM product_image JOIN my_art ON product_folder = product_code" );
if( !$query ) {
     die( mysql_error() ); 
}
$row =  mysql_fetch_array($query);

$i = 0;
while($row = mysql_fetch_array($query)) {
    if($row['COUNT(base_folder)'] < 1 && $row['image_type'] == 'B' && $row['view'] == 'FF') {
        echo $row['base_folder']."-".$i++;
        echo "<br />";
    }
}

谁能帮帮我,告诉我我做错了什么?

如果您想为每个'product'单独保留一个计数器,则必须检查循环中的产品是否仍然相同,或者这是另一个产品。请注意:查询中的order by子句是必须的。

<?php
$query = mysql_query( "SELECT * FROM product_image JOIN my_art ON product_folder = product_code ORDER BY product_folder" );
if( !$query ) {
     die( mysql_error() ); 
}
$row =  mysql_fetch_array($query);
$i = 0;
$last = '';
while($row = mysql_fetch_array($query)) {
    if( $row['COUNT(base_folder)'] < 1 && $row['image_type'] == 'B' && $row['view'] == 'FF' ) {
        if( $last !== $row['basefolder'] ) {
             $i = 0;
        }
        echo $row['base_folder']."-".$i++;
        echo "<br />";
        $last = $row['basefolder'];
    }
}

您可以使用数组来跟踪项目计数:

<?php
$test_data = array(
    'art0001',
    'art0001',
    'art0001',
    'art0002',
    'art0002',
    'art0003',
);
$item_count = array();
foreach($test_data as $item){
    if( isset($item_count[$item]) ){
        $item_count[$item]++;
    }else{
        $item_count[$item] = 1;
    }
    echo $item . '-' . $item_count[$item] . PHP_EOL;
}

这是一个简单的函数,用于获取具有重复值的数组,并仅在重复的名称后面附加一个数字。

            Array
            (
                [0] => samename
                [1] => namesame
                [2] => samename
                [3] => namename
                [4] => namename
                [5] => notsame
                [6] => samename
            )
            Array
            (
                [0] => samename
                [1] => namesame
                [2] => samename(2)
                [3] => namename
                [4] => namename(2)
                [5] => notsame
                [6] => samename(3)
            )       

            function uniqueNames($array){
                        $alreadyoccured=array();
                        $newarray=array();
                        foreach($array as $arr){
                            if(array_key_exists($arr,$alreadyoccured)){
                                $alreadyoccured[$arr]=$alreadyoccured[$arr]+1;
                                $newarray[]=$arr.'('.$alreadyoccured[$arr].')'; 
                            }else{
                                $alreadyoccured[$arr]=1;
                                $newarray[]=$arr; 
                            }
                        }
                        return $newarray; 
                    }