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();