2016-07-01 28 views
2

我有id_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(); 

這工作,但僅限於名字。它給出了重複的名稱,以及出現次數。有時候有兩個用戶名字相同但名字不同。如何通過連接兩列來檢查重複項?

我試圖用GROUP_CONCAT沒有成功。我也試圖做到這一點,我想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我試過,但我@f_anto編輯它,因爲我在以前的英語寫的查詢不工作了 – Komarzer

+0

,和我的列是法國人,我不想讓你的混亂思想,我選錯列在這兩個例子 – 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

你應該選擇添加命令全名。 此代碼:

$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); 

希望這將解決你的問題。)