Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/11/2011, 03:46
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Tomar el ultimo dato sin tener que ordenar

Código MySQL:
Ver original
  1. SELECT Auto_increment FROM information_schema.tables WHERE table_name='etcom';

Esto te dará el proximo autoincrement de la tabla etcom.

Luego le restas 1 y consultas directamente por el id no hace falta que filtres por fecha ni nada....

$proximo el valor obtenido con la consulta anterior

$ultimo=$proximo-1;


Código MySQL:
Ver original
  1. SELECT dataval FROM etcom
  2. WHERE id=$ultimo;

Con 10.800 insersiones por hora puedes tener alguna colisión, es decir que cuando uses el valor ya no sea el ultimo.... pero si lo hacias con una consulta ordenada y te funcionaba, esto seguro que es mas rápido.... siempre que tengas acceso a "information_schema"


Tambien tienes la funcion LAST_INSERT_ID() pero depende de sesiones y quizas no te funciona.

Si quieres el ultimo de una fecha no sirve lo anterior

Código MySQL:
Ver original
  1. SELECT MAX(id) FROM etcom
  2. WHERE `YEAR`>='$cur_yea'
  3.         AND `MONTH`>='$cur_mon'
  4.         AND `DAY`>='$cur_day'
  5.         AND HOUR(TIME)>$cur_hou
  6.         AND Box='$eq'
  7.         AND Sensor='$sn';

esto te dará el id maximo de la fecha seleccionada

Luego puedes hacer esto

Código MySQL:
Ver original
  1. SELECT dataval FROM etcom
  2. WHERE id=(SELECT MAX(id) FROM etcom
  3. WHERE `YEAR`>='$cur_yea'
  4.         AND `MONTH`>='$cur_mon'
  5.         AND `DAY`>='$cur_day'
  6.         AND HOUR(TIME)>$cur_hou
  7.         AND Box='$eq'
  8.         AND Sensor='$sn');

No se si ira muy rapido....

Crear un indice sobre la fecha te podria mejorar la performance... incluso uno compuesto con la fecha, la box y el sensor...

Perdona no me habia fijado esta buscando fecha >= mayor o igual a la actual??? cur_XXX se suele usar como acronimo de current...

Código MySQL:
Ver original
  1. SELECT dataval FROM etcom
  2. WHERE id=(SELECT MAX(id) FROM etcom
  3. WHERE Box='$eq' AND Sensor='$sn');

con esto tienes el último de una box y sensor determinado.... el maximo es el ultimo no te lies con la fecha actual!!!
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 15/11/2011 a las 05:06