Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [mysql] riempire vuoti

  1. #1

    [mysql] riempire vuoti

    Ciao a tutti ho questo problema, ho una tabella con dei dati con un id auto increment e quello non lo devo toccare poi ogni gruppo di dati a sua volta ha un id del tipo
    id nr oggetto
    1 1 scarpa
    2 2 scarpa
    3 3 scarpa
    4 1 pantalone
    5 2 pantalone

    ora se cancello la scarpa nr 2 mi si crea un buco avendo la scarpa nr 1 e 3,io vorrei che quando reinserisco una scarpa,l'id sara naturalmente incrementato, ma il numero deve essere 2
    Spero di essermi spiegato, posso farlo solo tramite sql?
    Grazie a chi vorra rispondere

  2. #2

    Re: [mysql] riempire vuoti

    Originariamente inviato da kappaekappa
    ..., posso farlo solo tramite sql?
    perché, con cosa vorresti farlo?

    comunque, se non vuoi scorrerti tutta la tabella fino a trovare un buco, la soluzione è:
    - ti crei una tabella con solo i numeri (tutti) da 1 fino al max che ti interessa
    - cerchi il "buco" mettendo in join (left join) la tabella dei numeri di riferimento con la tua tabella
    - il primo NULL a destra ti indica (a sinistra) il buco
    - se non trovi NULL, vuol dire che la tua tabella è piena, e quindi userai max(tabella riferimento)+1

    tranquillo, più semplice a farsi che a dirsi


  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    Re: [mysql] riempire vuoti

    Originariamente inviato da kappaekappa
    ora se cancello la scarpa nr 2 mi si crea un buco avendo la scarpa nr 1 e 3,io vorrei che quando reinserisco una scarpa,l'id sara naturalmente incrementato, ma il numero deve essere 2
    L'utilità quale sarebbe?

  4. #4

    Re: Re: [mysql] riempire vuoti

    Originariamente inviato da nicola75ss
    L'utilità quale sarebbe?
    nicolino, parla del nr, non dell'id. pensa ad esempio alla posizione nello scaffale, perfettamente lecito farlo.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Bo. Se non sono indiscreto sarei curioso di sapere esattamente cosa vuol fare.

  6. #6
    perché, con cosa vorresti farlo?
    Con php per esempio con cui posso fare anche la pizza mentre con sql sono alquanto carente

    L'utilità quale sarebbe?
    Sarebbe che se un dato articolo deve stare proprio in quella posizione, come diceva optime tipo scaffale, non posso fa altro che riempire i buchi lasciati vuoti

    Optime come dicevo con sql non sono un falco potresti farmi un esempio per favore?

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    La soluzione da adottare è quella che ti ha suggerito optime.

    codice:
    mysql> create table serie (id int) engine = myisam;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into serie (id) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
    Query OK, 10 rows affected (0.00 sec)
    Records: 10  Duplicates: 0  Warnings: 0
    
    mysql> create table oggetti (
        -> id int unsigned not null auto_increment primary key,
        -> nr int,
        -> oggetto varchar(50)
        -> ) engine = myisam;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql>
    mysql> insert into oggetti (nr,oggetto)
        -> select min(s.id) ,'scarpa'
        -> from serie as s
        -> left join oggetti as o
        -> on s.id = o.nr and o.oggetto = 'scarpa'
        -> where o.nr is null;
    Query OK, 1 row affected (0.02 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into oggetti (nr,oggetto)
        -> select min(s.id) ,'maglione'
        -> from serie as s
        -> left join oggetti as o
        -> on s.id = o.nr and o.oggetto = 'maglione'
        -> where o.nr is null;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into oggetti (nr,oggetto)
        -> select min(s.id) ,'maglione'
        -> from serie as s
        -> left join oggetti as o
        -> on s.id = o.nr and o.oggetto = 'maglione'
        -> where o.nr is null;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> select * from oggetti;
    +----+------+----------+
    | id | nr   | oggetto  |
    +----+------+----------+
    |  1 |    1 | scarpa   |
    |  2 |    1 | maglione |
    |  3 |    2 | maglione |
    +----+------+----------+
    3 rows in set (0.00 sec)
    
    mysql> insert into oggetti (nr,oggetto)
        -> select min(s.id) ,'scarpa'
        -> from serie as s
        -> left join oggetti as o
        -> on s.id = o.nr and o.oggetto = 'scarpa'
        -> where o.nr is null;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> select * from oggetti;
    +----+------+----------+
    | id | nr   | oggetto  |
    +----+------+----------+
    |  1 |    1 | scarpa   |
    |  2 |    1 | maglione |
    |  3 |    2 | maglione |
    |  4 |    2 | scarpa   |
    +----+------+----------+
    4 rows in set (0.00 sec)
    
    mysql> delete from oggetti where id < 4;
    Query OK, 3 rows affected (0.04 sec)
    
    mysql> select * from oggetti;
    +----+------+---------+
    | id | nr   | oggetto |
    +----+------+---------+
    |  4 |    2 | scarpa  |
    +----+------+---------+
    1 row in set (0.00 sec)
    
    mysql> insert into oggetti (nr,oggetto)
        -> select min(s.id) ,'scarpa'
        -> from serie as s
        -> left join oggetti as o
        -> on s.id = o.nr and o.oggetto = 'scarpa'
        -> where o.nr is null;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into oggetti (nr,oggetto)
        -> select min(s.id) ,'maglione'
        -> from serie as s
        -> left join oggetti as o
        -> on s.id = o.nr and o.oggetto = 'maglione'
        -> where o.nr is null;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql>
    mysql> select * from oggetti;
    +----+------+----------+
    | id | nr   | oggetto  |
    +----+------+----------+
    |  6 |    1 | maglione |
    |  5 |    1 | scarpa   |
    |  4 |    2 | scarpa   |
    +----+------+----------+
    3 rows in set (0.00 sec)

  8. #8
    Nicola grazie molto dell'esempio cosi esauriente ora me li studio subito

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.