【问题标题】:Query always returning 1 on rows number count [duplicate]查询总是在行数计数上返回 1 [重复]
【发布时间】:2017-05-10 19:04:33
【问题描述】:

我有包含很多“entregas”的“intervalos”,所以当我点击时我想计算行数,但它总是返回“1”作为结果。我究竟做错了什么?请帮忙。

数据库

Entregas 控制器

public function entregas_lista($idCarga) {

        $crud = new grocery_CRUD();

        $this->Entregas_Model->get_rows($idCarga);




        $this->load->view('commons/header', $datos);


        $crud->set_language("spanish");
        $crud->set_theme('bootstrap');

        $crud->set_table('entregas');
        $crud->unset_columns(array('accion', 'estado'));

        $crud->display_as('idIntervaloHorario', 'Franja Horaria');
        $crud->display_as('idAcciones', 'Acción');
        $crud->display_as('idEstadoSolicitud', 'Estado Solicitud')->display_as('fechaCita', 'Fecha Cita')
                ->display_as('horaCita', 'Hora Cita')
                ->display_as('numeroEntrega', 'Nº Entrega')
                ->display_as('Origen', 'Orígen')
                ->display_as('cargaPrevista', 'Carga Prevista')
                ->display_as('entregaPrevista', 'Entrega Prevista');


        //Clausula where
        $crud->where('entregas.idIntervaloHorario =', $idCarga);

        $crud->display_as('idCarga', 'Nº Entrega');

        $crud->set_relation('idCarga', 'intervalosHorarios', 'intervaloHorario');

        $crud->set_relation('idIntervaloHorario', 'intervalosHorarios', 'intervaloHorario');
        //Relación con la tabla acciones
        $crud->set_relation('idAcciones', 'acciones', 'nombreAccion');
        //Relación con la tabla estado
        $crud->set_relation('idEstadoSolicitud', 'estadosolicitudes', 'nombreEstado');

        $output = $crud->render();

        $this->_example_output($output);

Entregas 模型

 public function get_rows($idCarga) {

        $query = $this->db->query('SELECT COUNT(*) FROM entregas
        JOIN intervaloshorarios on intervaloshorarios.idIntervaloHorario = entregas.idCarga
        WHERE entregas.idIntervaloHorario = ' . $idCarga . ';');


        $query = $this->db->count_all_results();


        $num_rows = count($query);
        print_r($num_rows);


        return $num_rows;
    }

【问题讨论】:

  • 当您运行SELECT COUNT(anything) FROM.... 时,您只会返回一行。它将包含 COUNT 的行

标签: php mysql codeigniter mysqli


【解决方案1】:

不同的方法:

public function get_rows($idCarga) {

    $query = $this->db->query('SELECT COUNT(idCarga) as count FROM entregas
    JOIN intervaloshorarios on intervaloshorarios.idIntervaloHorario = entregas.idCarga
    WHERE entregas.idIntervaloHorario = ?');    // Safer with bound parameters 


   $stmt = $db->prepare($query);    // prepare
   $stmt->bind_param('s',$idCarga);  // bind the parameter
   $stmt->execute();                 // execute
   $stmt->bind_result($count);
   $stmt->fetch();

    return $count;
}

【讨论】:

  • Errrm 你如何填充变量$count ??? $stmt->bind_result($count); 告诉 mysqli 将结果计数值放在哪里。 它实际上并没有从结果集中获取它
  • 稳住,我删除了DV。我不是在骗你,只是不好的答案
  • 你还没有回答..?
  • 解释一下原因也是一个好主意,即没有选择其他列的 COUNT() 只会返回一行,这就是为什么 OP 总是得到一个 1
  • 另一个答案不需要,有很多重复
【解决方案2】:

根据您的查询,您已经要求 COUNT

$query = $this->db->query('SELECT COUNT(*) FROM entregas
        JOIN intervaloshorarios on intervaloshorarios.idIntervaloHorario = entregas.idCarga
        WHERE entregas.idIntervaloHorario = ' . $idCarga . ';');

所以基本上,如果你在 phpmyasmin 或你的 mysql 提示符中运行它,它会给你一个结果,即适合你查询的记录“COUNT”。

我不知道你的接口方法,所以我只是建议获取这个结果的值。这将是您的行数。

或者,您可以简单地执行 SELECT,然后计算行数,但这会增加您的结果集和获取时间,只是为了计算 sql 已经可以自己计算的东西。

【讨论】:

  • 见@clearshot66 回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多