2016-07-01 9 views
2

私は、id_user、firstname、およびnameカラムを持つUserテーブルを持っています。 すべての重複値をリストしたいと思います。SQLクエリで重複カラムを取得する

私はこれでした:しかし、名前だけのために、この作品

$query = $this->db->select('user.nom, COUNT(*) as count', false) 
         ->from('user') 
         ->group_by('user.nom') 
         ->having('COUNT(*) >', 1); 

    return $query->get()->result(); 

を。重複した名前が表示され、回数が何回表示されます。物事には、同じ名前で異なるファーストネームのユーザーが2人いることもあります。 2つの列を連結して重複をチェックするにはどうすればよいですか?

GROUP_CONCATを使用しようとしましたが、成功しませんでした。また、私はそれを名前とFIRSTNAMEをCONCAT、およびGROUP_BYしたかった、これを実行しようとしましたが、動作しません:

$query = $this->db->select('CONCAT(user.nom, ' ', user.prenom) as usr, COUNT(*) as count', false) 
         ->from('user') 
         ->group_by('usr') 
         ->having('COUNT(*) >', 1); 

    return $query->get()->result(); 

私はそれを動作させるために使用することができますか?

+0

あなたはuser.nameの列名を編集したのは何? –

+0

@ gofr1私は試しましたが、クエリはもう機能しません – Komarzer

+0

@f_anto前に英語で書いたので、私はそれを編集しました。私の列はフランス語で書かれていますので、間違った列2つの例の中で – Komarzer

答えて

2

ダブルGROUP-BYアプローチ:

$query = $this->db->select('user.name, user.prenom, COUNT(*) as count', false) 
         ->from('user') 
         ->group_by('user.name, user.prenom') 
         ->having('COUNT(*) >', 1); 

    return $query->get()->result(); 

CONCATアプローチ:

$sql = "SELECT CONCAT(user.name, ', ', user.prenom) AS name, COUNT(*) FROM user GROUP BY name HAVING COUNT(*) > 1"; 

はアプローチのJOIN:

$sql = "SELECT * FROM user AS a JOIN user AS b ON a.name = b.name AND a.prenom = b.prenom AND a.id != b.id" 
+0

私はあなたの最初の答えを試み、それは働いた:) – Komarzer

+0

あなたを助けてうれしい。しかし最後のものも試してください。私はこのソリューションが一番好きです:) – Marcus

0

selectコマンドにfullnameを追加する必要があります。このコードの :

$query = $this->db->select('user.name, COUNT(*) as count', false) 
         ->from('user') 
         ->group_by('user.name') 
         ->having('COUNT(*) >', 1); 

に(user.fullnameを追加します)に変更してください:

$query = $this->db->select('user.name,user.fullname, COUNT(*) as count', false) 
         ->from('user') 
         ->group_by('user.name') 
         ->having('COUNT(*) >', 1); 

うまくいけば、それはあなたの問題を解決します。)

関連する問題