-1

ファイナルテーブルを取得するにはどうすればよいですか?比較してレコードに空の列がある場合、後者の値で埋められるようにマージしたいと思います。ルールでは、ストアタイプはユーザーごとに1回だけ表示する必要があります

ここに画像の説明を入力してください

4

3 に答える 3

0

とでグループ化しているようusernameですstoretype。これを実行してみてください:

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

もちろん、これは、スクリーンショットに表示されているデータが実際にある場合に機能します。つまり、各列にnull以外の値が1つだけあり、列以外の各列usernamestoretypeペアがありidます。その場合、id列は最小値を選択したように見えるので、クエリでもその結果になります。

于 2012-05-28T18:29:25.910 に答える
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++;
        }
     }
  }


?>
于 2012-05-28T17:54:35.183 に答える
0

たぶん私はmysqlでそれほど用途が広いわけではありませんが、難しいデータ変更手法がなければ、それは不可能だと思います。

  • 特に編集するのは、一部の列では、最も遭遇した値を取得し、「マージされた」セルをその値に置き換えるためです。
于 2012-05-28T17:54:53.560 に答える