0

データベースに列がありint(11)、名前がわずかに異なるため (つまり、Johnathan Doe ではなく John Doe)、ユーザー名を ID のデータベースに一致させることができない場合があります。通常の ID は 11000 の範囲で始まるので、名前を整数に変換し、先頭に 00 などを追加して、誰かがレビューして更新するためのフラグをトリガーできるようにします。00 を取得するために使用できることはわかっていますstr_padが、名前からある程度一意になるように一定量の数値を生成できないようです。重複の可能性が高いことはわかっていますが、 の列で他に何ができるかわかりませんprimary/unique。どんな助けでも大歓迎です。

mt_randと を使用した例str_pad:

str_pad(mt_rand(100000000,999999999),11,'00',STR_PAD_LEFT);

おそらく名前文字列を使用するより良いオプションがありますか?

4

1 に答える 1

1

データベースに int(11) の列があります

その列は整数です。ストレージレベルでは、「11」は意味がありません。

ユーザー名の大きなテーブルがあり、誰かが 'John Smith' を 40 回入力しようとしたとします。何をしたいですか?誰かに他のすべての亜種と比較してもらいたいですか? 「Johnathan」、「Jonathon」、「John」、「Jhon」などの異体字を識別して確認しますか? 大きな決定ですが、レビューが必要な ID 番号の処理方法には影響しません。

何らかの理由でレビューが必要な行を特定するには、それらのキーを別のテーブルに置く方がはるかに優れています。

create table review_sets (
  set_id integer not null,
  set_created timestamp not null default now(),
  rationale varchar(100) not null default 'Duplicate of existing user?',
  primary key (set_id),
  unique (set_created)
);

create table review_ids (
  set_id integer not null,
  user_id integer not null,
  primary key (set_id, user_id),
  foreign key (set_id) references review_sets (set_id),
  foreign key (user_id) references users (user_id)         -- Not shown.
);

列 review_sets.rationale を使用すると、スペルの問題を、支払いの遅延やサイトの悪用などと区別できます。review_ids のテーブルを使用すると、可能なすべてのバリエーションではなく、いくつかのバリエーションに ID を制限できます。(しかし、それがどれほど役立つかはわかりません。)

レビュー担当者、レビューが完了した時間、およびそのレビュー担当者が下した決定を識別する列を追加することができます。アプリケーションによっては、決定に達した後で行を削除するだけでよい場合があります。

于 2013-08-27T17:39:25.953 に答える