Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509

    [php+mysql]trovare i buchi nei progressivi

    ciao a tutti,
    ongi tanto torno a rompervi le scatole con le mie domande.

    come da topic la domanda era questa:
    è possibile recuperare che numeri mancano da un progressivo di un id ?

    mi spiego meglio,
    in un db con diverse tabelle collegate da un id dove vengono inseriti e cancellati continuamente dati (nella speranza tanti) i cui id sono collegati alle relative immagini/filmati si possono arrivare a valori di id molto alti per pochi records.

    ipotizzando che vengano scritti e cancellati 1000 record al mese(dubito di arrivare a tanto ma non ho voglia di riprenderlo in mano dopo anni) nell'arco di qualche hanno potrei avere un id 130 000 quando magari ho 800 record all'interno.

    al che mi sono chiesto.
    non c'è un modo di capire quali id mancano e prendere il valore minore?

    l'ultima prova che ho fatto è creare una tabella con un progressivo da 1 a 200 000, e ho provato a realizzare delle join tra la tabella dei progressivi e quella degli inserimenti per recuperare il valore piu piccolo inutilizzato..ho cercato di utilizzare anche la funzione NULLIF ma non ottengo ciò che pensavo.

    sapreste darmi un aiuto o qualche consiglio?

    grazie mille.

  2. #2
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Stai usando le id da un'altra parte o le usi solo per accedere i dati? Nel secondo caso, potresti fare un dump della tabella, svuotarla e reimportare tutto, senza id ovviamente, così ti viene messo tutto con delle nuove id.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    attualmente le uso per accedere ai dati, anche se però mi rendo conto che ho sbagliato nello spiegarmi. in realtà non sono id ma numeri di riferimento


    mettiamo caso la tabella utente con un id , la tabella personaggio con un id e un riferimento, la tabella armi con un id, piu le immagini relative.

    allora guardando il personaggio si nota che

    id | rif | ......
    -------------------
    50 | 2 |
    50 | 13 |
    50 | 22 |

    tabella armi

    rif | ....
    -----------------
    2 | spada
    2 | pugnale
    2 | arco

    immagini:
    13_nomefile.jpg

    allora l'utente 50 ha 3 personaggi. uno con id 2 uno con id 13 e uno con id 22 (proprio perchè a forza di scrivere e cancellare sono saltati i "rif" (e son questi che vorrei sempre continui)

    il riferimento (rif) viene usato per associare le relative armi o le altre tabelle al singo personaggio. oltre che alle immagini.

    quindi se io voglio cercare il personaggio 70 trovo tutti i dati relativo ad esso (è l'unico campo che è univoco)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    sono arrivato a pensare sta cosa:


    in questo modo recupero una tebella con una colonna con i progressivi e sull'altra i progressivi usati.(tempo di esecuzione 0.0003 la prima e poi 0.0001)
    Codice PHP:
    SELECT tabella1.id AS tab1IFNULL(tabella2.id,0)AS tab2 FROM tabella1
    LEFT JOIN tabella2 ON tabella1
    .id tabella2.id 

    ora vorrei recuperare gli id non utilizzati, e ho pensato di andare a prendere la query precedente come tabella, e selezionare il valore tab1 dove tab1 > 0 o tab1 != tab2
    ma mi crasha mysql e va tutto in timout controllando i log sul server..
    Codice PHP:
    SELECT tab1 FROM (SELECT tabella1.id AS tab1IFNULL(tabella2.id,0)AS tab2 FROM tabella1
    LEFT JOIN tabella2 ON tabella1
    .id tabella2.id) AS valori WHERE tab2='0' 

    qualche idea?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    ok sono riuscito a risolvere
    alle volte scrivere qui aiuta a ragionare in modo diverso

    Codice PHP:
    SELECT MIN(tabella1.idFROM tabella1 
    LEFT JOIN tabella2 ON tabella1
    .id tabella2.id WHERE tabella1.value-IFNULL(tabella2.id,0)!='0' 

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    hm unico difetto è il tempo di esecuzione. 1.6 secondi

    a qualcuno viene in mente qualche altra idea per avere progressivi senza buchi?

    grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    qualche guru del php che saprebbe indicarmi un modo per ottenere la stessa cosa ma con query piu leggere?

    avendo impostato un valore X alto per la tabella che gestisce i progressivi ovviamente ripete l'operazione per tutte le righe, quando in realtà basterebbe che lo facesse fino a che non trova il primo buco. in quel caso blocco le tabelle, scrivo e le libero.

    non occorre lo script, non sono un genio ma se avete anche solo la possibilità di darmi un consiglio del tipo: prova a fare cosi ,cosi e cosi .
    io poi mi cerco il modo di farlo con le varie funzioni o vi rompo le balle un altor po :P

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.