2017-02-08 3 views
0

を複製以上の場合、私は、このようなテーブルがあります。私は、彼らがユニークである必要がありますhttp://www.yoursite.com/ALIASそれは

としての私のリンクに別名を使用

enter image description here

を。

しかし、私は約100万行を持っているので、以下のコードを使用すると時間がかかり、サイトがダウンします。

ところで、あなたのアドバイスは何ですか?

ありがとうございます。

$sql2="SELECT id,adi,alias from firma where id>1400 and id<100000 and onay=0 "; 
    $gor=mysqli_query($i_link,$sql2); 
    while($sonuc=mysqli_fetch_row($gor)) 
    { 
     $alias=$sonuc['2']; 
     $ee="SELECT id from firma where alias='".$alias."' "; 
     $says=mysqli_query($i_link,$ee); 
     $say=mysqli_num_rows($says); 
     if($say>1) 
      { 
       $r=rand(0,999); 
       $aliasy=$alias."-".$r; 
     mysqli_query($i_link,"UPDATE firma SET alias='".$aliasy."' WHERE id='".$sonuc['0']."' "); 

      } 
     } 
+0

select distinct –

+0

これは別個の値を選択するために働きます。すべての行を編集する必要があります – Bagova

+0

alias = '"。$ alias"のfirmaからのSELECT COUNT(ID) " –

答えて

1

これはあなたのコードがやっているように見えるものです:

  1. は別名
  2. ゲット行数を取得し、ID行ごとにrange
  3. で、tableからすべての行を取得します。各エイリアスに対して、1より大きいかどうかを確認します。
  4. 行数が1より大きい場合は、行番号を別名の先頭にランダム番号

ステップ1〜3は同じデータを再フェッチするため少し冗長ですが、複数回表示されているエイリアスのみを取り出して更新することをお勧めします。

SELECT alias, GROUP_CONCAT(id) 
FROM test 
WHERE id >= 1 AND id <= 335003 
GROUP BY alias 
HAVING COUNT(*) > 1; 

このクエリはあなたに複数回表示される別名を与える、あなたがして、これらを反復処理IDを取得し、対応するレコードを更新することができます。以下はそのようなすべてのエイリアスを取得するための照会例です。これは1回の繰り返しを節約し、アプリをより速くします。

ここにはSQL Fiddleです。