2016-05-05 12 views
0
  • 私はmysqlデータベースに 'users'テーブルを持っています。
  • このテーブルには、同じメールアドレス アドレスを持つ同じユーザーの重複したエントリがありますが、その他の情報は異なる場合があります。
  • だから、私は重複した電子メールアドレスのすべてのレコードを選択して、 私は特定の電子メールアドレスのすべての行をalltogetherにすることができます。

これを達成する最も良い方法は何ですか?あなたは、特定のメールアドレスの同じメールアドレスを持っているユーザーの情報が必要な場合列の重複値に基づいてレコードを選択する方法は?

+0

**上のご注意を**論理的に言えば、** Unique Constraint **を電子メールアドレスを保持する列に入れて、重複する電子メールをテーブル –

答えて

0
$product_groups = mysql_query("SELECT * FROM products GROUP BY ProductId ORDER BY id"); 

while($productGroups_fetch = mysql_fetch_array($product_groups, MYSQLI_ASSOC)) 
{ 
    $product_images = mysql_query("SELECT ImageSource FROM products WHERE ProductId = 8"); 

while($fetch_product_image = mysql_fetch_array($product_images, MYSQLI_ASSOC)) 
{ 
} 
} 
0

あなたはこのようにそれを行うことができます。

SELECT * FROM users WHERE email = "whatever"; 

をあなたはemailという名前の列を持っていることを推測します。このステートメントでは、同じ電子メールを持つすべてのレコードを取得します。

SELECT COUNT(*) AS numberDuplicates FROM users WHERE email = "whatever"; 

そして、あなたがこのメールが重複されているかどうかを知るためにnumberDuplicates値を使用することができます。

特定のメールアドレスは、あなたがこの別のステートメントを使用することができ、データベースに重複している場合は、あなたが知りたい場合は

SELECT * FROM users WHERE email_address IN 
(
    SELECT email_address FROM users 
    GROUP BY email_address HAVING COUNT(*) > 1 
) 

を、あなただけの1つの以上のエントリを持つ各メールアドレスに対するユーザーのカウントをしたい場合は、この実行します:

+1

に入力できないようにしてください。あなたの最初の提案は私にアイデアを与えました。私は以下の方法を使用しました: – RoMo

+0

このクエリの結果セットのOuterloop: "SELECT id、UserId、FirstName、LastName、Email、AdminNote FROM customers GROUP BY Email ORDER BY id" 外部ループ内: "SELECT * FROM customers WHERE Email = '[email protected]'" – RoMo

+0

@RoMoテーブルのすべての列を選択する場合は、すべての列の名前の代わりに '*'を使用できます。列(私はそれが事実であるかわからない)。あなたがしたことによると、あなたはアウターループなしでこれを試すことができます: 'SELECT * FROM customers WHERE Email = '[email protected]' GROUP BY Email ORDER BY id;'。それがあなたのために働くかどうか私に教えてください。 –

0

これを試してみてください

SELECT email_address, COUNT(*) AS number_of_entries 
FROM users 
GROUP BY email_address 
HAVING COUNT(*) > 1 
関連する問題