mysql合并表中的重复记录

时间:2012-05-28 17:51:12

标签: php mysql

我怎样才能获得决赛桌?我想合并,如果它比较并且记录中有一个空列,它会用后一个值填充它。规则是storetype应该只为每个用户出现一次

enter image description here

3 个答案:

答案 0 :(得分:0)

这可能是我做过的最脏的代码片段:))如果你要处理的记录超过几百条,我甚至都不推荐它。让我知道,因为我无法在IDE上查看它。

<?php

  $query = 'SELECT * FROM TABLE 1';
  $result = mysql_query($query);
  if ($result){
      while ($result=mysql_fetch_array($result)){
         $data[] = $row;
     }
  }

  // 

  if (isset($data)){
     $x=0;
     $y=0;
     $missingColumn = array();

     while ($x < count($data)){
        foreach ($data[$x] as $key=>$value){
            if (empty($value)){
               $missingColumn[$y][] = $key;
            } else {
               $output[$y][] = $value;
            }  
        }
        if ($missingColumn[$y]){
           $rowComplete = FALSE;
           $yetToBeCompleted = count($missingColumn[$y]);
           while (!$rowComplete && $x<count($data)){
              $x++;
              foreach ($missingColumn as $value){
                 if ($data[$x][$value] <> ''){
                    $output[$y][$value] = $data[$x][$value];
                    $yetToBeCompleted--;
                 }  
              }
              if (0 == $yetToBeCompleted){
                 $y++;
                 break;
                 //$rowComplete = TRUE;
              }
           }
           $y++;          

        } else {
          $y++;
          $x++;
        }
     }
  }


?>

答案 1 :(得分:0)

也许我不是那种多功能的mysql,但没有任何困难的数据更改技术,我认为这是不可能的。

  • 特别编辑,因为在某些字符串中,您获取最常遇到的值并将“合并”单元格替换为该值

答案 2 :(得分:0)

您好像是按usernamestoretype进行分组。试试这个:

select min(id), username, min(filename), min(date), min(desc), storetype,
    min(password), min(email), min(ftp)
from table1
group by username, storetype

注意,当然,这将适用于您确实拥有屏幕截图中显示的数据的情况,即每个usernamestoretype对中只有1个非空值列,但id列。在这种情况下,id列似乎您选择了最小值,因此查询也会产生最小值。