2016-04-19 16 views
0

Hier ist meine Situation. Ich habe 2 Tische. Ich versuche die 2 Tabellen zu kombinieren, mit denen ich erfolgreich war. Jetzt muss ich die Werte addieren, aber ich möchte nicht den gleichen Benutzer wiederholen, wenn ich es zeige.coderigniter brauchen Hilfe Gruppierung und Summe der Tabellen

Beispiel Tabellen:

Tabelle 1:

users 
[ id ][name ] 
[ 1 ][John Doe] 
[ 2 ][Jane Doe] 
[ 3 ][Joe Doe] 

Tabelle 2:

activity_hours 
[ id ][user_id][hours] 
[ 1 ][ 1 ][ 3 ] 
[ 1 ][ 2 ][ 1 ] 
[ 1 ][ 3 ][ 4 ] 
[ 1 ][ 1 ][ 2 ] 
[ 1 ][ 2 ][ 3 ] 

Ich möchte die Stunden alle für jeden Benutzer von Aktivitätsstunden aufzuaddieren, wollen aber passen Die Menge zu dort Name

Hier ist mein aktueller Code: Hours_mode l.php

$this->db->select(' 
     users.id as id, 
     users.name, 
     activity_hours.hours 
    '); 

    $this->db->from('users'); 
    $this->db->join('activity_hours', 'users.id = activity_hours.user_id'); 

    $query = $this->db->get(); 
    return $query->result(); 

hours_veiw.php

foreach ($result as $activity) { 
    echo $activity->name.' : '.$activity->hours; 
} 

gewünschte Ausgabe:

John Doe : 5 
Jane Doe : 4 
Joe Doe : 4 

== == UPDATE

Sie user3774708 danken. Das bisschen, das du mir gegeben hast, konnte ich den Rest erledigen. Hier ist der Rest des Codes, die ich ändern musste: ich geändert:

activity_hours.hours 

zu

sum(activity_hours.hours) as hours 

letzte Datenbankabfrage

$this->db->select(' 
    users.id as id, 
    users.name, 
    sum(activity_hours.hours) as hours 
'); 

$this->db->from('users'); 
$this->db->join('activity_hours', 'users.id = activity_hours.user_id'); 
$this->db->group_by('users.id'); 
$query = $this->db->get(); 
return $query->result(); 

Antwort

2

Verwenden GROUP_BY auf users.id

$this->db->select(' 
    users.id as id, 
    users.name, 
    activity_hours.hours 
'); 

$this->db->from('users'); 
$this->db->join('activity_hours', 'users.id = activity_hours.user_id'); 
$this->db->group_by('users.id'); 
$query = $this->db->get(); 
return $query->result();