siempre que Tengo el siguiente conjunto de resultados de una tabla de base de datos MySQL:valores de desplazamiento de la cadena en una tabla
+----+------+-------+
| ID | type | value |
+----+------+-------+
| 8 | A | 1435 |
| 9 | B | 7348 |
| 10 | A | 1347 |
| 11 | A | 3478 |
| 12 | A | 4589 |
| 13 | B | 6789 |
+----+------+-------+
Me gustaría eliminar fila ID 8 y empujar los valores en el campo 'valor' hacia abajo, de tal manera que cada fila tenga el valor de la entrada anterior, pero que afecte solo a aquellas en las que el campo 'tipo' es el mismo que la fila que se borra ('A' en este caso).
Es decir, la eliminación de la fila Identificación del 8 finalmente debe producir lo siguiente:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| - | - | - | *
| 9 | B | 7348 | |
| 10 | A | 1435 | * |
| 11 | A | 1347 | * |
| 12 | A | 3478 | * |
| 13 | B | 6789 | V
+----+------+-------+
ID 10 ha heredado el valor de ID 8, a continuación, ID 11 hereda de ID 10, y así sucesivamente. Sin embargo, observe cómo las filas que tienen el tipo 'B' no se ven afectadas.
Entonces, la pregunta: ¿hay alguna manera de realizar este "cambio" de valores sin tener que consultar y actualizar cada fila una por una? En un mundo ideal, haría una consulta para hacer un cambio y luego otra para eliminar la fila, pero no estoy muy seguro de si esto es posible en absoluto.
(también preferiría no utilizar disparadores, ya que tengo la intención encapsular toda la lógica de la aplicación dentro de la propia aplicación)
¿En la consulta? Lo dudo. Cada actualización es una nueva consulta. Recomendaría un procedimiento SQL, pero si no los quiere, supongo que están atrapados en una construcción de bucle. Para acelerar las cosas, usa las transacciones. – clentfort
Creo que es posible recopilar todas las filas que necesitan actualizarse en una temptable (#temptable). A partir de ahí, puede calcular el nuevo valor y usar una única declaración de actualización para actualizar su tabla principal de la temptable. Entonces no necesitas una contstrucción de bucle. –
EDITAR: Probablemente pueda usar ROW_NUMBER() para cambiar las filas. Como esto no está disponible en mysql, compruebe la respuesta de OMGPonies en esta pregunta: http://stackoverflow.com/questions/1895110/row-number-in-mysql –