Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Mysql] Correggere numerazione in un campo

    ciao!

    in una tabella ho un campo così (prendo solo il campo di interesse):
    codice:
    1
    1
    1
    2
    2
    3
    3
    3
    3
    6
    6
    7
    9
    9
    come vedete i valori posono essere duplicati, ma ci possono essere dei buchi.
    io vorrei "azzerare" quei buchi facendoli diventare così:
    codice:
    1
    1
    1
    2
    2
    3
    3
    3
    3
    4
    4
    5
    6
    6
    come vedere il numero di record e ripetizioni è rimasto invariato.
    ma il conteggio si è "allineato".
    come posso fare secondo voi??

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Rispondo in italiano per non entrare in dettagli di MySql dove sono impreparato

    Fai una SELECT DISTINCT sul codice e ottieni
    1
    2
    3
    6
    7
    9

    Su questo risultato fai un conteggio dei record "WHERE T.codice < K.codice" ( una specie di ROW NUMMER )
    ma non so come di dice in MySql e ottieni
    1 --- 1
    1 --- 2
    3 --- 3
    6 --- 4
    7 --- 5
    9 --- 6

    adesso hai la chiave di rinumerazione e puoi fare un UPDATE sulla Tabella

    .

  3. #3
    ciao!

    mi sa che forse mi sono spiegato male, o forse non ho capito cosa intendevi dire.

    tu come risultato ottieni tutti valori distinti e ordinati.
    i miei sono ordinati ma non distinti.
    io devo arrivare a questo:
    codice:
    1
    1
    1
    2
    2
    3
    3
    3
    3
    4
    4
    5
    6
    6
    non questo:
    codice:
    1
    2
    3
    4
    5
    6
    io devo riempire i buchi dove ci sono, ma sempre per gruppi!

  4. #4
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ciao!

    mi sa che forse mi sono spiegato male, o forse non ho capito cosa intendevi dire.

    tu come risultato ottieni tutti valori distinti e ordinati.
    i miei sono ordinati ma non distinti.
    io devo arrivare a questo:
    codice:
    1
    1
    1
    2
    2
    3
    3
    3
    3
    4
    4
    5
    6
    6
    non questo:
    codice:
    1
    2
    3
    4
    5
    6
    io devo riempire i buchi dove ci sono, ma sempre per gruppi!

    non mi viene in mente un metodo con una query.

    Ma da codice dovrebbe essere abbastanza semplice
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    ciao!

    ho letto meglio, e dal punto di vista logico credo di aver capito.
    solo che non so come fare a fare una query su un risultato.
    o meglio, faccio questa query:
    codice:
    SELECT DISTINCT indice_pagina FROM m_indice ORDER BY indice_pagina
    a questo punto devo eseguire la seconda query su questo risultato.
    ma come faccio?
    a prescindere da mysql....

  6. #6
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    non mi viene in mente un metodo con una query.

    Ma da codice dovrebbe essere abbastanza semplice
    si penso anche io che debba usare un qualche linguaggio e non sql.
    sto provando con php.

    magari vedo se postare la.

  7. #7
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ciao!

    ho letto meglio, e dal punto di vista logico credo di aver capito.
    solo che non so come fare a fare una query su un risultato.
    o meglio, faccio questa query:
    codice:
    SELECT DISTINCT indice_pagina FROM m_indice ORDER BY indice_pagina
    a questo punto devo eseguire la seconda query su questo risultato.
    ma come faccio?
    a prescindere da mysql....
    vari modi. Uno puo essere ad esempio "salvare" la tua query in una vista, usare tale vista nella seconda query.
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  8. #8
    ok allora.
    ho creato una funzione che mi fa queste due query:
    codice:
    CREATE TEMPORARY TABLE IF NOT EXISTS tmp
                    AS (SELECT DISTINCT indice_pagina FROM m_indice ORDER BY indice_pagina)
    SELECT tmp.indice_pagina TMP, m_indice.indice_pagina MI
                     FROM m_indice, tmp WHERE tmp.indice_pagina < m_indice.indice_pagina
    e mi stampa poi i valori:
    codice:
    5 - 6
    5 - 6
    5 - 7
    6 - 7
    5 - 7
    6 - 7
    5 - 7
    6 - 7
    5 - 7
    6 - 7
    5 - 8
    6 - 8
    7 - 8
    5 - 8
    6 - 8
    ma c'è qualcosa che nn va mi sa.

  9. #9
    vado di teoria

    fai una distinct dei tuoi numeri su una tabella temp
    ottieni
    1
    2
    3
    5
    7
    8
    ...
    aggiungi una colonna alla temp, dove metterai il rank del numero
    otterrai quindi una tabella così
    1 1
    2 2
    3 3
    5 4
    7 5
    8 6
    ... ...

    a questo punti usi la temp per fare una update della tabella originaria


  10. #10
    ho fatto qualche modifica.
    ho creato una tabella apposita, che svuoto ogni volta.
    la tabella è formata da un campo AI e un campo dove metto i valori tirati fuori dal DISTINCT.
    quindi:
    codice:
    TRUNCATE m_tmp_indice
    FOR SELECT DISTINCT indice_pagina FROM m_indice ORDER BY indice_pagina
         INSERT INTO m_tmp_indice VALUES(id_auto_increment,numero_pagina)
    SELECT * FROM m_tmp_indice
    in teoria il campo AI dovrebbe fungere come il campo che mi avevi detto te di aggiungere alla temp table.
    però escono così:
    codice:
    1 - 5
    2 - 6
    3 - 7
    4 - 8
    5 - 9
    6 - 10
    7 - 11
    8 - 12
    9 - 13
    10 - 14
    11 - 15
    12 - 16
    a sinistra il campo AI e destra il numero pagina.

    EDIT
    modificato il campo AI usando al suo posto un counter.
    ora escono bene mi sembra:
    codice:
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 19
    mi manca l'update.
    Ultima modifica di fermat; 10-01-2014 a 13:22

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.