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

时间:2011-07-08 07:25:39

标签: php mysql

我认为解决方案有点容易,当然它是在逃避我。

我有两个表,并且他们正在一个具有相同值的字段上加入它们:

示例记录:

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 />";
    }

}

任何人都可以帮助我并告诉我我做错了吗?

3 个答案:

答案 0 :(得分:2)

如果您想单独为每个“产品”保留一个计数器,则必须检查产品在循环中是否仍然相同,或者是否是另一个产品。请注意:查询中的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'];
    }
}

答案 1 :(得分:1)

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

<?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;
}

答案 2 :(得分:0)

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

            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; 

                    }