$user = JFactory::getUser();

// User ist angemeldet?
if (!$user->guest)
{
 // ENTWEDER Array aller Gruppen des angemeldeten Users:
 $groupId = $user->groups;
 
 // ODER Array der Wunsch-Gruppen selber definieren (hartkodiert):
 #$groupId = array(15, 12, 8, 6);

 $db    = JFactory::getDbo();
 $query = $db->getQuery(true);
 
 // ENTWEDER die gewünschten Felder der Tabelle #__users im Array einzeln definieren:
 //  Aus Sicherheitsgründen zu bevorzugen.
 //  Weiterer Vorteil: Man kann Sortierung vordefinieren.
 $query->select($db->qn(array(
  'a.name',
  'a.id',
  'a.email',
  'a.username',
 )));
 
 // ODER obere select-Zeilen deaktivieren und ALLE FELDER der Tabelle #__users:
 #$query->select('a.*');
 
 $query->from($db->qn('#__users', 'a'));
 $query->join('LEFT',
  $db->qn('#__user_usergroup_map', 'map') . ' ON ' . 
  $db->qn('map.user_id') . ' = ' . $db->qn('a.id')
 );

 $query->where($db->qn('map.group_id') . ' IN (' . implode(',', $groupId) . ')');
 
 // Angemeldeten User ausschließen:
 $query->where($db->qn('a.id') . ' != ' . $user->id);
 #echo 'DEBUG $query: '.print_r((string )$query, true);exit;

 $db->setQuery($query);
 $users = $db->loadAssocList('id');
 #echo 'DEBUG $users: '.print_r($users,true);exit;
 
 $csvZeilen = array();
 
 // Ich persönlich bevorzuge Tab-getrennt ($fieldSeparator = "\t"),
 //  da Usernamen Semikolons enthalten können.
 $fieldSeparator = ';';

 foreach ($users as $user)
 {
  $csvZeilen[] = implode($fieldSeparator, $user);
 }
 
 $csvContent = implode("\n", $csvZeilen);
 #echo 'DEBUG $csvContent: '.print_r($csvContent, true);exit;
}