protected function get_query_clauses($query_elements)
 {
     $query_clauses = array();
     $tables = array();
     // Clause from
     $query_clauses['from'] = ' from ' . $query_elements['table'];
     $tables[] = $query_elements['table'];
     foreach ($query_elements['join'] as $join) {
         $query_clauses['from'] .= ' join ' . $join['table'];
         $tables[] = $join['table'];
         $query_clauses['from'] .= ' on ' . $query_elements['table'] . '.' . $join['referencefield'] . ' = ' . $join['table'] . '.' . $join['externalfield'];
         if ($join['condition']) {
             $query_clauses['from'] .= ' and ' . $join['condition'];
         }
     }
     // Clause where
     $query_clauses['where'] = '';
     foreach ($query_elements['elementfield'] as $elementfield) {
         if (!$query_clauses['where']) {
             $query_clauses['where'] .= ' where (';
         } else {
             $query_clauses['where'] .= ' or';
         }
         $query_clauses['where'] .= ' ' . $query_elements['table'] . '.' . $elementfield . ' = ' . $this->authority->get_num_object();
     }
     if ($query_clauses['where']) {
         $query_clauses['where'] .= ')';
     }
     foreach ($query_elements['condition'] as $condition) {
         if (!$query_clauses['where']) {
             $query_clauses['where'] .= ' where';
         } else {
             $query_clauses['where'] .= ' and';
         }
         $query_clauses['where'] .= ' ' . $condition;
     }
     if ($query_elements['getconcepts'] == 'true') {
         $concepts_ids = $this->authority->get_concepts_ids();
         if (count($concepts_ids)) {
             if (!$query_clauses['where']) {
                 $query_clauses['where'] .= ' where';
             } else {
                 $query_clauses['where'] .= ' and';
             }
             $query_clauses['where'] .= ' ' . $query_elements['conceptfield'] . ' in (' . implode(',', $concepts_ids) . ')';
         }
     }
     // Clause order
     $query_clauses['order'] = '';
     if ($query_elements['order']) {
         // On commence par faire une jointure si nécessaire
         if ($query_elements['order']['table'] && !in_array($query_elements['order']['table'], $tables)) {
             $query_clauses['from'] .= ' join ' . $query_elements['order']['table'];
             $query_clauses['from'] .= ' on ' . $query_elements['table'] . '.' . $query_elements['order']['referencefield'] . ' = ' . $query_elements['order']['table'] . '.' . $query_elements['order']['externalfield'];
         }
         $query_clauses['order'] .= ' order by ' . ($query_elements['order']['table'] ? $query_elements['order']['table'] : $query_elements['table']) . '.' . $query_elements['order']['field'];
     }
     return $query_clauses;
 }