Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    io ho una tabella links

    1 www.html.it
    2 google.it
    5 libero.it
    6 miosito.it

    ora io voglio far salire miosito di un posto, quindi voglio far così

    1 www.html.it
    2 google.it
    6 libero.it
    5 miosito.it

    avrei usato un altro campo x l'ordine se e solo se gli id avessero avuto un qualche tipo di relazione cn altre tabelle, ma in questo caso nn c'è nulla...

    io ho messo id sl x differenziare i campi uno dall'atlro...

    @pietro.mac: mica io sto spostando l'ordine fisico bit x bit dei record, io sto solamento rovescando 2 id, l'ordine fisico dei record rimane uguale, ma quando io faccio una selezione ordinando x l'id, tutto cambia, non credi?

  2. #12
    Originariamente inviato da FinalFantasy
    @pietro.mac: mica io sto spostando l'ordine fisico bit x bit dei record, io sto solamento rovescando 2 id, l'ordine fisico dei record rimane uguale, ma quando io faccio una selezione ordinando x l'id, tutto cambia, non credi?
    Allora un campo autoincrement ti obbliga ad una query in piu'. Con altre complicazioni.

    esempio:

    id = 5 diventa id nn
    id = 6 diventa 5
    id = nn diventa 6

    problema: l'id nn diventa la futura base dell'autoincrement. Bisogna riportare giu' il valore dell'autoincrement.

    Potresti liberare un id (es. id = 1) da usare per lo switch dei valori (nn = 1). Oppure togliere l'autoincrement.

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

  3. #13
    campo ordine no ? .... ORDER BY ordine .... resta l'id auto increment, fine
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #14
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da andr3a
    campo ordine no ? .... ORDER BY ordine .... resta l'id auto increment, fine
    e si può mettere l'auto increment in un secondo campo? già ho l'auto increment su id

    edit: a quanto pare no: #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

  5. #15
    Originariamente inviato da andr3a
    campo ordine no ? .... ORDER BY ordine .... resta l'id auto increment, fine
    Sarebbe troppo facile....

    Mi sono limitato a descrivere lo scenario dello spostamento/scambio di un id autoincrement.

    poi il carro verra' attaccato al bue come crede il padrone (del bue).

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

  6. #16
    secondo me scambiare la chiave primaria per alterare l'ordinamento è da criminali, però liberissimo, lo script è tuo.

  7. #17
    Originariamente inviato da FinalFantasy
    e si può mettere l'auto increment in un secondo campo?
    il campo ordine è
    INT(10) UNSIGNED NOT NULL

    non deve essere autoincrement

    quando fai un insert selezioni MAX(ordine) + 1 (se result è 0 metti 1) e lo schiaffi nel campo ordine del nuovo record

    quando modifichi cambi solo l'ordine senza fare il passaggio internedio a NN descritto da piero (hai temporaneamente due "ordine" uguale perchè lavori con gli id che non cambiano)

    quando elimini fai UPDATE tabella SET ordine = ordine - 1 WHERE ordine > $ordine_eliminato

    fine ... campo sempre sincronizzato da 1 a N ... che non modifica in alcun modo le relazioni con le altre tabelle
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #18
    codice:
    id	ordine		nome
    ---------------------------------------------
    1	1		Pippo
    2	2		Pluto
    
    
    # aggiungo Paperino
    
    INSERT INTO tabella (ordine, nome) VALUES (SELECT MAX(ordine) + 1 FROM tabella, "Paperino")
    
    
    # tabella dopo l'insert
    1	1		Pippo
    2	2		Pluto
    3	3		Paperino
    [ORDER BY ordine: Pippo, Pluto, Paperino]
    
    
    
    # sposto Paperino (id 3) di uno sopra
    SELECT ordine FROM tabella WHERE id = 3
    
    if $ordine > 1
    	# caso in sui esiste un ordine precedente
    	UPDATE tabella SET ordine = ordine + 1 WHERE ordine = ordine - 1
    	UPDATE tabella SET ordine = ordine - 1 WHERE id = 3
    else
    	# caso in cui ordine è il primo ... o non si fa niente, o si mette come ultimo ("salto della pila")
    	UPDATE tabella SET ordine = ordine - 1
    	UPDATE tabella SET ordine = (SELECT MAX(ordine) + 1 FROM tabella) WHERE id = 3
    
    
    # tabella dopo l'update
    1	1		Pippo
    2	3		Pluto
    3	2		Paperino
    [ORDER BY ordine: Pippo, Paperino, Pluto]
    
    
    # sposto Pippo (id 1) di uno sotto
    SELECT ordine FROM tabella WHERE id = 1
    SELECT MAX(ordine) FROM tabella
    
    if $ordine < $MAX_ordine
    	# caso in sui esiste un ordine successivo
    	UPDATE tabella SET ordine = ordine - 1 WHERE ordine = ordine + 1
    	UPDATE tabella SET ordine = ordine + 1 WHERE id = 1
    else
    	# caso in cui ordine è l'ultimo ... o non si fa niente, o si mette come primo ("salto della pila")
    	UPDATE tabella SET ordine = ordine + 1
    	UPDATE tabella SET ordine = 1 WHERE id = 1
    
    
    # tabella dopo l'update
    1	2		Pippo
    2	3		Pluto
    3	1		Paperino
    [ORDER BY ordine: Paperino, Pippo, Pluto]
    
    
    # elimino Pippo (id 1) dalla tabella
    SELECT ordine FROM tabella WHERE id = 1
    UPDATE tabella SET ordine = ordine - 1 WHERE ordine > $ordine
    DELETE FROM tabella WHERE id = 1
    
    
    
    # tabella dopo il delete
    2	2		Pluto
    3	1		Paperino
    [ORDER BY ordine: Paperino, Pluto]
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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