Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346

    MYSQL - UPDATE con WHERE IN

    Salve

    domanda, se uso un comando UPDATE con clausola WHERE IN( 1,2,3,4,5,6), l'ordine dei numeri
    nel IN(...) viene mantenuto? Se si è uno standard? Nel senso che posso contarci perche' è "legge"?In pratica ho una serie di ID e dovrei aggiornare, incrementando di 1 un campo, posto qualche esempio :

    codice:
    ID	DESC 	VALORE
    50	a		1
    55	ab		2
    12	abc		3
    10	abcd	        4
    .
    .
    .
    787	test	9999999

    Grazie per le risposte
    Per gli Spartani e Sparta usa spartan Il mio github

  2. #2
    Una query del genere ti modifica tutti i record presenti nell'elenco IN() allo stesso modo. Si comporta similmente ad un OR.

    A parte il fatto che se vuoi numeri precisi ad un id preciso devi fare update singoli. Se invece vuoi incrementare di 1 un range di id allore devi fare

    .....
    set campo = campo + 1
    where id IN(........)

    e tutti gli id in elenco avranno il campo con il valore incrementato di 1

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

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Forse potrei usare una sottotabella, ne sai qualcosa?

    ** edit **

    nn funge
    Per gli Spartani e Sparta usa spartan Il mio github

  4. #4
    Originariamente inviato da linoma
    Forse potrei usare una sottotabella, ne sai qualcosa?

    ** edit **

    nn funge
    Non e' chiaro da che dati parti e quale risultato vuoi raggiungere.

    Mettiamo il caso che tu voglia raggiungere un risultato come hai messo nell'esempio parrebbe che tu voglia assegnare un indice progressivo ad un ordinamento alfabetico del campo DESC (desc tra l'altro e' una parola riservata) a prescindere dall'id.

    Se fosse questo il caso non e' necessario fare una cosa come quella che ho descritto. Usa order by ed otterrai l'ordinamento che preferisci.

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

  5. #5
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Si tratta di qualcosa di molto simile descritto nella prima tua risposta. Soltanto che il valore del campo lo dovrei assegnare. Cmq ho trovato questo e pare funzionare

    codice:
    SELECT * FROM tabella WHERE id IN(56,60,61,58,59,70,73) ORDER BY FIELD(id,56,60,61,58,59,70,73)
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ho provato una cosa del genere

    codice:
    UPDATE tabella
     SET ord=@riga:=@riga+1
    WHERE id IN ( 56, 60, 61, 58, 59, 70, 73 ) 
    ORDER BY FIELD(id, 56, 60, 61, 58, 59, 70, 73 )
    ma nn mi funziona, dovrei aggiungere (SELECT @riga:=0) as alias, ma poi nn accetta ORDER BY. Idee,soluzioni?
    Per gli Spartani e Sparta usa spartan Il mio github

  7. #7
    Sinceramente non ho ancora capito cosa vorresti fare.

    Se devi mettere nel campo dei valori differenti tra loro e a prescindere dal contenuto attuale devi fare un update per ogni record. Se invece devi sommare 1 a tutti basta una sola query.

    Se devi solo fare un ordinamento NON serve l'UPDATE, basta eseguire il SELECT con l'ORDER BY e numerare i record estratti.


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

  8. #8
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ho risolto, facendo un SET @riga=0; e poi l'update, Si lo so è difficile da capire credo che tu capisca meglio la query.
    Per gli Spartani e Sparta usa spartan Il mio github

  9. #9
    Originariamente inviato da linoma
    Ho risolto, facendo un SET @riga=0; e poi l'update, Si lo so è difficile da capire credo che tu capisca meglio la query.
    Ok. Quindi tu vuoi numerare con una sequenza progressiva gli id presentati nel tuo ordine.

    Se questo e' una tantum puo' anche andare, ma se poi queste sequenze dovessero cambiare cioe' altro ordine altri id la cosa potrebbe complicarsi. Azzeramento dei valori, risistemazione dell'ordinamento altrimenti rischieresti di avere valori doppioni od altro.

    Se, ripeto se, si trattasse di numerare una sequenza che puo' variare preferirei numerare i record estratti con order by field() nel ciclo while di estrazione. Ma e' tanto per dire ... non conosco il tuo progetto.


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

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.