Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323

    Aggiornamento sequenziale PHP-MySql

    Ciao ragazzi, ho una tabella (ad esempio per la gestione delle foto) nella quale salvo la posizione delle foto. Ad esempio
    codice:
    id------foto------posizione
    1-------img-------1
    2-------img-------2
    3-------img-------3
    il punto è che se io cancello il record con id=2 devo rinumerare la posizione di tutti quei record che hanno la posizione > di quella del record che ho appena eliminato.
    codice:
    id------foto------posizione
    1-------img-------1
    2-------img-------2
    3-------img-------3
    
    cancello il record id=2 e aggiorno la posizione del record id=3
    
    id------foto------posizione
    1-------img-------1
    3-------img-------2
    sapete come aiutarmi?
    grazie
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  2. #2
    Ma per posizione cosa intendi?
    Nel layout finale del sito le foto hanno una posizione rigida?

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    ciao alcio, grazie per aver risposto. Semplicemente la posizione è l'ordinamento che le foto hanno nel sito, quelle che l'utente visitatore vede. Infatti la query è così: SELECT * FROM foto ORDER BY posizione. l'amministratore, da area privata, può modificare la posizione delle foto.
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  4. #4
    Beh.. in caso di cancellazione dovrai agire su due step.
    Se il link/bottone di cancellazione prevede il solo numero ID della foto nel database, dovrai prima di tutto effettuare una query di SELECT limitate a quell'ID per ottenere la POSIZIONE.
    Se invece trasporti la posizione della foto come riferimento per il delete, allora non devi effettuare questo passaggio.
    Il mio consiglio è quello di trasportare entrambe le variabili.

    Con l'ID effettui il delete del rigo, con la posizione l'update della posizione delle foto seguenti.
    Non ho provato se funziona o meno, ma io farei così:
    Codice PHP:
    /* 
       ammettendo che la variabile che indica la posizione 
       della foto sia contenuta nella variabile
       $posizione 
    */

    $sql "
    UPDATE foto SET posizione = (posizione - 1) WHERE posizione >= 
    $posizione
    "

    Ho scritto qui senza testare il codice, e non so se posso avere commesso qualche errore, ma l'importante è che capisci il meccanismo!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    esatto..proprio quello che avevo pensato..però non so se funziona posizione = (posizione - 1)
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  6. #6
    si tratta di un argomento un pò complesso ma mi è capitato già di sbatterci la testa.
    Ti dò i consigli secondo l'opinione che ho maturato:

    il campo position deve essere UNIQUE (così eviti due record con la stessa posizione) e senza "buchi".

    Essendo un campo di tipo unique le query DELETE e UPDATE che tradizionalmente faccio con la condizione riferita ad un campo id auto_increment le posso condizionare direttamente sul campo 'position'

    Questa cosa che può sembrare una scemenza in realtà mi ha consentito di agevolarmi molto il compito di gestione di tale genere di campo: ti faccio un esempio.

    Abbiamo una tabella con 10 record quindi il campo posizion (unique e senza buchi) avrà valori che vanno da 1 a 10.
    Voglio eliminare il campo con position=5 tramite un link get
    codice:
    Elimina
    Eseguirò due query:
    codice:
    DELETE tabella WHERE position=$_GET['position']
    UPDATE tabella SET position=position-1 WHERE position>$_GET['position']
    Per le insert invece devi crearti una funzione tipo get_maxPosition
    Codice PHP:
    function get_maxPosition($table$fieldPosition){
    $query "SELECT MAX($fieldPosition) AS maxPosition FROM $table";
    $result mysql_query($query) or die(mysql_error());
    $row mysql_fetch_array($result);
    return 
    $row[0];

    questa generica funzione ti permetterà di ottenere il valore massimo di un campo di una tabella... ergo al momento della insert il valore di position sarà quello che ottieni da questa funzione incrementato di 1.

    Per UP e DOWN lì son c**zi... !!!
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  7. #7
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    ciao oly, gentilissimo. allora io ho già tutto pronto e funzionante per quanto riguarda up, down, insert e delete. il problema è solamente che se elimino un record devo riaggiornare le posizioni. inoltre, scusate se non l'ho detto prima, ma il campo position non può essere unique perchè nella tabella "immagini" ho foto relazionate a più gallerie (ovviamente ho una tabella anche per loro) di conseguenza avrò più position=1, più position=2 ecc ecc. adesso il mio unico dubbio è sapere se quello che mi avete scritto nell'update funziona oppure no, cioè position=(position-1).
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  8. #8
    Originariamente inviato da Andy_87
    ......... il mio unico dubbio è sapere se quello che mi avete scritto nell'update funziona oppure no, cioè position=(position-1).
    Funziona: fidati!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.