如何使用CodeIgniter获取表别名的list_fields?

tct7dpnv  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(119)

我有这样的模式:

public function listar_jogos_fase($id_fase) {
    $this->db->select('fas.nome as `fase`, jogos.numero as `jogo`, jog1.nome as `jogador1`, jog2.nome as `jogador2`, jogos.data as `data`, jogos.hora as `hora`, jogos.local as `local`', FALSE);
    $this->db->from('jogos');   
    $this->db->join('jogadores as jog1', 'ON jog1.id = jogos.jogador1');
    $this->db->join('jogadores as jog2', 'ON jog2.id = jogos.jogador2');
    $this->db->join('fases as fas', 'ON fas.id = jogos.fase');
    $this->db->where('fase',$id_fase);
    $dados['dados'] = $this->db->get()->result();
    $dados['colunas'] = $this->db->list_fields('jogos');
    return $dados;
}

因此,我希望收到以下结果,其中只有别名表的一些选定字段:

fase      jogo   jogador1        jogador2               data        hora            local
1° Fase    1     Andy Murray     Juan Martin del Potro  2017-01-19  16:30:00 Roland Garros, Paris - Quadra 1
1° Fase    2     Novak Djokovic  Roger Federer          2017-01-19  16:30:00 Roland Garros, Paris - Quadra 2

但是我收到了这个其他的,带有我的表的所有字段:

id      fase    numero          jogador1              set1_jg1   set2_jg1  set3_jg1                       set4_jg1 set5_jg1 jogador2 set1_jg2 set2_jg2 set3_jg2 set4_jg2 set5_jg2 data hora local
1° Fase  1      Andy Murray     Juan Martin del Potro 2017-01-19 16:30:00  Roland Garros, Paris - Quadra 1
1° Fase  2      Novak Djokovic  Roger Federer         2017-01-19 16:30:00  Roland Garros, Paris - Quadra 2

如果我使用它:

public function listar_jogos_fase($id_fase) {
    $dados['dados'] = $this->db->query(
        "SELECT       
            d.nome fase,
            a.numero jogo,
            b.nome jogador1,
            c.nome jogador2,
            a.data data,
            a.hora hora,
            a.local local
        FROM jogos a
            JOIN jogadores b ON a.id = b.id
            JOIN jogadores c ON a.id = c.id
            JOIN fases d ON a.fase = d.id
        where fase=$id_fase"
    )->result_array();
    
    $dados['colunas'] = $this->db->list_fields('jogos');

    return $dados;
}

我会收到这个:

Array
(
    [dados] => Array
        (
            [0] => Array
                (
                    [fase] => 1° Fase
                    [jogo] => 1
                    [jogador1] => Andy Murray
                    [jogador2] => Andy Murray
                    [data] => 2017-01-19
                    [hora] => 16:30:00
                    [local] => Roland Garros, Paris - Quadra 1
                )

            [1] => Array
                (
                    [fase] => 1° Fase
                    [jogo] => 2
                    [jogador1] => Novak Djokovic
                    [jogador2] => Novak Djokovic
                    [data] => 2017-01-19
                    [hora] => 16:30:00
                    [local] => Roland Garros, Paris - Quadra 2
                )

        )

    [colunas] => Array
        (
            [0] => id
            [1] => fase
            [2] => numero
            [3] => jogador1
            [4] => set1_jg1
            [5] => set2_jg1
            [6] => set3_jg1
            [7] => set4_jg1
            [8] => set5_jg1
            [9] => jogador2
            [10] => set1_jg2
            [11] => set2_jg2
            [12] => set3_jg2
            [13] => set4_jg2
            [14] => set5_jg2
            [15] => data
            [16] => hora
            [17] => local
        )

)

我知道如何处理这些结果,但如果可能,我希望使用CodeIgniter的$this->db->list_fields()来获取别名表字段的名称(别名,而不是原始名称)。
因此,如果我使用$this->db->list_fields('jogos'),我将收到原始表'jogos'的所有字段,如数组[columns]所示。
但我不需要所有字段,我只需要[data]数组中返回的7个字段,它们是:[fase],[jogo],[jogador1],[jogador2],[data],[hora],[local] .
我想使用类似$this->db->list_fields('a')的数据,其中'a'是我的原始数据表'jogos'的别名,但是如果我使用$this->db->list_fields('a'),我会得到这个错误:

Error Number: 42S02/1146
    
    Table 'tennis.a' doesn't exist
    
    SHOW COLUMNS FROM `a`
    
    Filename: C:/wamp64/www/tennis/system/database/DB_driver.php
    
    Line Number: 691

我怎么能做到这一点?这是可能的吗?

roejwanj

roejwanj1#

试试这个:

public function listar_jogos_fase($id_fase) 
{
      $this->db->query("SELECT 
      fas.nome fase,
      a.numero jogo,
      b.nome jogador1,
      c.nome jogador2,
      a.data data,
      a.hora hora,
      a.local local
      FROM jogos a
      JOIN jogadores b ON a.id = b.id
      JOIN jogadores c ON a.id = c.id
      JOIN fases d ON a.fases = d.id
      where fase=$id_fase")->result_array();
}

相关问题