a condizione che ho il seguente set di risultati da una tabella di database mysql:valori di spostamento lungo la catena in una tabella
+----+------+-------+
| ID | type | value |
+----+------+-------+
| 8 | A | 1435 |
| 9 | B | 7348 |
| 10 | A | 1347 |
| 11 | A | 3478 |
| 12 | A | 4589 |
| 13 | B | 6789 |
+----+------+-------+
Vorrei eliminare la riga ID 8 e spingere i valori nel campo 'valore' in basso, in modo tale che ogni riga abbia il valore della voce precedente, ma influisce solo su quelli in cui il campo 'tipo' è uguale alla riga che si sta eliminando ('A' in questo caso).
Vale a dire, la cancellazione fila id 8 alla fine dovrebbe produrre il seguente:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| - | - | - | *
| 9 | B | 7348 | |
| 10 | A | 1435 | * |
| 11 | A | 1347 | * |
| 12 | A | 3478 | * |
| 13 | B | 6789 | V
+----+------+-------+
ID 10 ha ereditato il valore ID 8, quindi ID 11 eredita da ID 10, e così via. Si noti tuttavia come le righe con tipo "B" non sono interessate.
Quindi la domanda: esiste un modo per eseguire questo "spostamento" dei valori senza dover interrogare e aggiornare ogni riga una per una? In un mondo ideale vorrei fare una query per fare shift e poi un'altra per cancellare la riga, ma non sono del tutto sicuro se questo è possibile.
(Anche io preferirei non utilizzare i trigger, dal momento che ho intenzione incapsulare tutta la logica dell'applicazione all'interno dell'applicazione stessa)
Su richiesta? Ne dubito. Ogni aggiornamento è una nuova query. Vorrei raccomandare una procedura SQL, ma se non vuoi quelli, credo che sei bloccato ad una costruzione ad anello. Per velocizzare le cose, usa le transazioni. – clentfort
Penso che sia possibile raccogliere tutte le righe che devono essere aggiornate in un temptable (#temptable). Da lì, è possibile calcolare il nuovo valore e utilizzare una singola istruzione di aggiornamento per aggiornare la tabella principale dal temptable. Quindi non hai bisogno di una istruzione di loop. –
MODIFICA: puoi probabilmente utilizzare ROW_NUMBER() per spostare le righe. Dal momento che questo non è disponibile in mysql, controlla la risposta di OMGPonies a questa domanda: http://stackoverflow.com/questions/1895110/row-number-in-mysql –