2016-07-01 14 views
2

Ich habe eine User-Tabelle mit id_user, Vorname und Name Spalten. Ich möchte alle doppelten Werte auflisten.Get doppelte Spalten mit einer SQL-Abfrage

Ich tat dies:

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

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

Dies funktioniert, aber nur für den Namen. Er gibt den Namen doppelt an, mit der Anzahl, wie oft er erscheint. Die Sache ist manchmal, dass es zwei Benutzer mit demselben Namen aber unterschiedlichen Vornamen gibt. Wie kann ich Dubletten überprüfen, indem ich zwei Spalten aneinanderreihe?

Ich habe versucht, GROUP_CONCAT mit keinem Erfolg zu verwenden. Ich habe auch versucht, dies zu tun, ich wollte den Namen und den Vornamen verketten, und GROUP_BY es, funktioniert aber nicht:

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

Was kann ich verwenden, damit es funktioniert?

+0

Was haben Sie die Spaltennamen von user.name bearbeiten? –

+0

@ gofr1 Ich habe versucht, aber die Abfrage funktioniert nicht mehr – Komarzer

+0

@f_anto Ich habe es bearbeitet, weil ich es in Englisch geschrieben habe, und meine Spalten sind in Französisch, wollte ich Sie nicht verwirrt denken, dass ich falsche Spalten auswählte in den beiden Beispielen – Komarzer

Antwort

2

Doppel GROUP-BY-Ansatz:

$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 Ansatz:

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

JOIN Ansatz:

$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

Ich habe Ihre erste Antwort versucht und es hat funktioniert :) – Komarzer

+0

froh, Ihnen zu helfen. Aber geben Sie bitte auch den letzten Versuch. Ich mag diese Lösung am meisten :) – Marcus

0

Sie sollten den vollständigen Namen im Befehl select eingeben. für diesen Code:

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

bitte ändern (user.fullname hinzufügen):

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

Hoffentlich wird es Ihr Problem zu beheben;)

Verwandte Themen