2016-07-15 8 views
-1

私たちは、投稿をユーザーに合わせるコードを書いています。姓、名字などを考えれば、私たちは一つの結果に絞ることを試みます。ただし、住所やその他の連絡先情報の提出は間違っている可能性がありますので、可能な限りいくつかの基準を照合することをお勧めします。1つの結果か2つ以上の結果があるかどうかを確認するMySQL関数がありますか?

Count by first name and last name 
if count == 1 // done 

if count > 1, count by first name, last name, email 
if count == 1 // done 

// etc. 

我々は一人の結果を取得したり、クエリを与えないだろうかどうか言うための最良の方法は何ですか:ここ

は、アルゴリズムですか?

明白な答えは数えただけですが、数字が必要ないので不要です。複数の結果か単数結果かどうかを確認するだけです(一致が数千)。別のオプションは、カウントを最小化する、2件の結果を制限することがあるが、やや混乱コード(それは同様に制限されていますならば、なぜ、カウントを行う?)

を追加するこれを行うための好ましい方法はありますか?

+0

電子メールは一般に個人に固有のものです。私はそれが必須フィールドの場合は最初/姓を超えて1番目を使用することをお勧めします。あなたがしようとしているのは、特定の人物を特定できるLOGICALキーを特定することです。最初の/最後の名前でさえもめったに十分ではありません。あなたはロバートスミスかロバートスミスジュニアかもしれないロブスミスを取得します。ドメインは通常重複を許さないので、電子メールはもっときめ細かなようです!あなたは グループは、ロールアップ カウント(*)を有する(します。FName、LNAME、電子メール)により、テーブルから (*)カウント、... 'を選択します。FName、LNAME、メール例えばrollup'とのことで、'グループを使用することができるかもしれ= 1' – xQbert

+0

メールが悪い例かもしれません。私たちに与えられたものが名字、名字、通り名、街路番号、都市などであるならば、それらのいずれかのタイプミスが一致しないことを意味します。さらに、ユーザはダミーの電子メールアドレスを使用することを決定する可能性があります。 – whiterook6

+0

うんOK、NM。私は最初の読書の質問を理解したとは思わない。 – xQbert

答えて

1

MySQLは1試合以上を持っている場合を教えてくれる機能を持っていません。 あなたのオプションは、count(*)またはLIMIT 2です。

LIMITオプションは、実行するために速くなるはずですが、私は2つの間の性能差は巨大ではないと仮定するつもりです。 これは実際のデータで確認する必要がありますが、もちろんインデックスは(first_name, last_name)にする必要があります。

その場合、あなたは、単一のクエリを実行することによって実行する2番目のクエリを保存することができます:

SELECT first_name, last_name, email 
FROM users 
WHERE first_name = 'foo' 
AND last_name = 'bar' 

次に、あなたのコードでは、あなたが簡単に結果の数を取得することができます。

1の場合 - >あなたはそれを得ました。

よりは、場合 - >あなたはすでにあなたが必要とするレコードをフィルタリングするためにそれを使用することができ、結果セットと使用中の電子メールを持っています。

関連する問題