Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    30

    scambiare id PRIMARY KEY in tabella mysql

    ciao a tutti, ecco il mio problema
    ho questa tabella nel database mysql:

    tab1(id, campo1, campo2)


    sto cercando di realizzare una funzione che scambia l'id che gli passo come parametro con quello della riga precedente, in modo che poi quando stampo la tabella la riga interessata risulta spostata di una posizione in alto.

    la funzione prende in ingresso l' id della riga da spostare in su, si ricava l'id della riga precedente, e poi effettuo uno scambio ponendo provvisoriamente a zero l'id della riga precedente.

    Codice PHP:
    function riga_up($id){  
    $risultato mysql_query("SELECT id FROM `tab1`"); 
    while (
    $riga mysql_fetch_array($risultatoMYSQL_ASSOC)) { 
    if(
    $riga["id"]==$id) break; 
    else 
    $prec=$riga["id"];// trovo id della riga prima 

     
    //metto provvisoriamente  id precendente a 0 
    mysql_query("UPDATE `tab1` SET `id` = 0 WHERE `tab1`.`id` = '$prec'"); 
    //scambio l'id maggiore con quello minore 
    mysql_query("UPDATE `tab1` SET `id` = '$prec' WHERE `tab1`.`id` = '$id'"); 
    mysql_query("UPDATE `tab1` SET `id` = '$id' WHERE `tab1`.`id` = 0");
     } 
    il problema è che inspiegabilmente avvolte funziona e altre no...
    possibile che l'errore sia nella query con cui seleziono tutti gli id all'inzio? (SELECT id FROM `tab1`)

  2. #2
    una chiave primaria contraddistingue un record e non il contenuto del record. E' una manovra fuori dalla logica di essere di un database spostare delle chiavi primarie. Molto meglio se aggiungi una colonna di ordinamento dei record ed agisci su quella.

    Comunque sia, i record nella tabella del db non sono mai in ordine fisico assoluto ma per definizione sono posizionati in modo random nel file che li contiene. Il primo buco che trova viene occupato dal record ultimo inserito. Ad ogni modo cosa fai son fatti tuoi.

    Se vuoi trovare "per certo" il valore dell'id precedente di un tuo id indicato la via e' la seguente:

    codice:
    select id from tabella
    where id <  '$tuo_id'
    order by id desc
    limit 1
    ottieni esattamente il valore dell'id precedente a prescindere da buchi vuoti formatisi con il gioco delle tre carte....

    non spostare mai sull'id 0 che e' mal digerito da una chiave primaria. Usa un numero alto, fuori dal possibile range utilizzato.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    30
    grazie mille piero.mac il problema era proprio quella query

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 © 2020 vBulletin Solutions, Inc. All rights reserved.