php - formulario - MySQL/MySQLi selecciona de la tabla hasta que se encuentre un valor dado
insertar datos en mysqli con php (2)
La consulta será
SELECT * FROM table_name
WHERE PrimaryID <= 12(your_id) AND SecondaryID=9 and TertiaryID=4 AND Limit=1
ORDER BY DateTime DESC
Está probado y funcionando
He buscado durante bastante tiempo en esto y parece que no puedo encontrar algo que me sirva, ya que cada pregunta similar se refiere a alcanzar cierta suma de una columna.
Estoy buscando una forma de buscar a través de los registros en una tabla todos los valores de columna comunes (no son registros consecutivos en la tabla, pero deben ser registros consecutivos cuando se tienen en cuenta los valores comunes) y recuperar todos los registros hasta una columna específica tiene un valor diferente.
Teniendo en cuenta los datos:
PrimaryID SecondaryID TertiaryID Limit DateTime
12 9 4 1 2013-03-22 00:00:14
11 9 4 1 2013-03-22 00:00:13
10 54 11 0 2013-03-22 00:00:12
9 9 4 1 2013-03-22 00:00:11
8 9 23 1 2013-03-22 00:00:10
7 9 4 1 2013-03-22 00:00:09
6 9 4 0 2013-03-22 00:00:08
5 9 16 0 2013-03-22 00:00:07
4 72 32 0 2013-03-22 00:00:06
3 9 4 1 2013-03-22 00:00:05
2 9 4 1 2013-03-22 00:00:04
1 9 4 0 2013-03-22 00:00:03
Estoy tratando de recuperar los registros con SecondaryID = 9 e TertiaryID = 4 hasta Limit = 0 (ordenado por DateTime DESC).
Usando PrimaryID 12 como punto de partida, esperaría lo siguiente:
PrimaryID SecondaryID TertiaryID Limit DateTime
12 9 4 1 2013-03-22 00:00:14
11 9 4 1 2013-03-22 00:00:13
9 9 4 1 2013-03-22 00:00:11
7 9 4 1 2013-03-22 00:00:09
Y para PrimaryID 3 como punto de partida:
PrimaryID SecondaryID TertiaryID Limit DateTime
3 9 4 1 2013-03-22 00:00:05
2 9 4 1 2013-03-22 00:00:04
Actualmente estoy recuperando todos los resultados para SecondaryID = 9 e TertiaryID = 4 y luego reviso en PHP - y actualmente con cientos de resultados (y creciendo cada semana) es demasiado lento para trabajar en producción.
También aceptaré gustosamente una solución específica para MySQLi, ya que estamos a punto de emprender una transición a MySQLi en lugar de MySQL.
Me di cuenta de que he estado haciendo esta consulta de la manera incorrecta.
En lugar de "contar hacia atrás" desde un punto dado en los datos para ver cuándo el Límite se convirtió primero en = 1 en la secuencia, en cambio tuve que buscar la ocurrencia previa de Límite = 0 y luego consultar hacia adelante hasta mi PrimaryID inicial.
La consulta resultante que cubre todo lo que necesito es
SELECT * FROM table1 WHERE SecondaryID=''9'' AND TertiaryID=''4'' AND `Limit`=''1'' AND PrimaryID<=''3'' AND `DateTime`>= (SELECT `DateTime` FROM table1 WHERE SecondaryID=''9'' AND TertiaryID=''4'' AND `Limit`=''0'' AND PrimaryID<=''3'' ORDER BY `DateTime` DESC LIMIT 1) ORDER BY `DateTime` DESC