update_batch update not left example active codeigniter activerecord count group-by

not - update codeigniter example



¿COUNT/GROUP BY con registro activo? (5)

Tengo una mesa con la siguiente información:

id | user_id | points -------------------------- 1 | 12 | 48 2 | 15 | 36 3 | 18 | 22 4 | 12 | 28 5 | 15 | 59 6 | 12 | 31 etc.

Lo que quiero es un top 10 (array) con la mayoría de las entradas por user_id (orden de alto a bajo). Entonces, usando la tabla de arriba, necesito la siguiente matriz a cambio:

  • 12 => 3 filas
  • 15 => 2 filas
  • 18 => 1 fila
  • etc.

¿Cómo puedo hacer esto con CodeIgniter usando el método de consulta de registro activo? ¿Se puede hacer esto con COUNT y GROUP BY user_id?


Aunque es una respuesta tardía, diría que esto te ayudará ...

$query = $this->db ->select(''user_id, count(user_id) AS num_of_time'') ->group_by(''user_id'') ->order_by(''num_of_time'', ''desc'') ->get(''tablename'', 10); print_r($query->result());


Creo que deberías contar los resultados con FOUND_ROWS () y SQL_CALC_FOUND_ROWS . Necesitará dos consultas: select , group_by , etc. Agregará un signo más y seleccione: SQL_CALC_FOUND_ROWS user_id . Después de esta consulta, ejecute una consulta: SELECT FOUND_ROWS() . Esto devolverá el número deseado.


Creo que querrás algo como esto:

$this->db->select(''user_id, COUNT(user_id) as total''); $this->db->group_by(''user_id''); $this->db->order_by(''total'', ''desc''); $this->db->get(''tablename'', 10);

Esto producirá un resultado como

| USER_ID | TOTAL | | 12 | 3 | | 15 | 2 | | 18 | 1 |

En el pasado, siempre me ha resultado difícil saber exactamente qué hace CodeIgniter con mis cadenas de registros activos. Especialmente cuando las cadenas se vuelven algo complejas. Tu publicación me inspiró a crear una herramienta simple para mostrar la declaración SQL real.

Para usar la herramienta solo pega en tu registro activo y haz clic en el botón Enviar. Debería devolver la declaración SQL correspondiente. Nota: Hice esto rápidamente y no lo he probado a fondo. No está conectado a un DB, por lo que algunos tipos de consultas pueden dar lugar a errores.

La herramienta de vista previa de Active Record here .

ACTUALIZACIÓN: Como algunos señalaron en los comentarios, la consulta original estaba sumando los user_ids en lugar de contarlos. Actualicé la consulta de registro activo para corregir esto.


Este código cuenta las filas con el rango de fechas:

Controlador:

$this->load->model("YourModelName"); $data [''query''] = $this->YourModelName->get_report();

Modelo:

public function get_report() { $query = $this->db->query("SELECT * FROM reservation WHERE arvdate <= ''2016-7-20'' AND dptrdate >= ''2016-10-25'' "); return $query; }

donde ''arvdate'' y ''dptrdate'' son dos fechas en la base de datos y ''reservation'' es el nombre de la tabla.

Ver:

<?php echo $query->num_rows(); ?>

Este código es para devolver el número de filas. Para devolver los datos de la tabla, utilice

$query->rows(); return $row->table_column_name;


$this->db->select(''overal_points''); $this->db->where(''point_publish'', 1); $this->db->order_by(''overal_points'', ''desc''); $query = $this->db->get(''company'', 4)->result();