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

    Come sapere il valore più alto di un campo autoincrement?

    Buon giorno,vorrei sapere come è possibile estrapolare tramite una select il valore più alto di un campo autoincrement.

    Mi spiego meglio.
    Ho il campo nProgr autoincrement,nella tabella ho 30 campi che sono arrivati al nProgr 99,un po sono stati cancellati,prima e dopo il 99esimo campo.
    Il problema è che,non sò quanti campi dopo il 99esimo sono stati cancellati, e quindi mi servirebbe sapere qual'è il prossimo campo...

    Perchè il problema effettivo è che,il valore di nProgr mi serve per associarlo al titolo di un giornale per un upload di un file in pdf.
    es: $nProgr. "_" . $titolo . ".pdf"; Capite?

    E' possibile sapere ciò?
    Grazie mille...

  2. #2
    SELECT MAX(nomecampo) non ti aiuta ..

    mysql_insert_id() restituisce 0 se la precedente query non ha generato un valore AUTO_INCREMENT. Se è necessario salvare il valore per usarlo in seguito, assicurarsi di richiamare mysql_insert_id() immediatamente dopo la query che ha generato il valore.

    Nota: Il valore della funzione SQL LAST_INSERT_ID() di MySQL contiene sempre il più recente valore AUTO_INCREMENT generato e non è azzerato dalle query.
    <?php echo ' Emiliano Gabrielli (aka AlberT) ',"\n",
    ' socio fondatore e membro del direttivo del GrUSP ',"\n",
    ' AlberT_at_SuperAlberT_it - www.SuperAlberT.it ',"\n",
    ' IRC: #php,#AES azzurra.com ',"\n",'ICQ: 158591185'; ?>

  3. #3
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    OPS stavo scrivendo

    Mettiamo che il campo ID e' l'autoincrement.Puoi fare questo:

    Codice PHP:
    SELECT MAX(id) as numeroMassimo FROM tabella 

  4. #4
    grazie mille...molto gentile!!! se puoi aiutarmi ancora.. c'è un'altro post mio sul problema della Libreria FPDF,se puoi cortesemente.Grazie ancora...

  5. #5
    una domanda ancora...si è vero solo cosi non funziona

    codice:
    SELECT MAX(id) as numeroMassimo FROM tabella
    non mi restituisce nulla...
    però non posso nemmeno usare queste funzioni in quanto non uso MySql ma MYSql-Front !!!

    codice:
    Nota: Il valore della funzione SQL LAST_INSERT_ID() di MySQL contiene sempre il più recente valore AUTO_INCREMENT generato e non è azzerato dalle query.
    quindi?che devo fare?Sto proprio in crisi..

  6. #6
    Sapere qual'e' il prossimo campo dell'id auto increment e' ben diverso dal sapere qual'e' il MAX(id) presente nella tabella.

    Infatti tu stesso dici di avere id mancanti tra il MAX(id) ed il prossimo che verra' inserito.

    Per sapere il MAX fai come ti hanno detto sinora, oppure con ORDER BY id DESC LIMIT 1 (meno performante di MAX()).

    Per sapere qual'e' il prossimo devi chiederlo a MySQL con una query.

    SHOW TABLE STATUS LIKE 'nome_tabella'

    poi trovi il dato nel campo "Auto_increment"

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

  7. #7
    ho fatto come mi hai detto e mi ha restituito una serie di dati tipo:
    Name=TBRASSEGNA
    Engine=MyISAM
    ..
    ..
    Auto_increment = 151
    e via via tutti gli altri

    adesso in pratica come dovrebbe essere strutturata la query?

    Questa è la query:
    codice:
    select LAST_INSERT_ID() from TBRASSEGNA ORDER BY nProgr DESC LIMIT 1
    E poi perchè se provo direttamente da MySql-Front funziona ma sul server no?Certo sono domande stupide,ma almeno mi chiariscono un pò.

    questo è il codice che utilizzo per estrapolare i dati dalla select:
    codice:
    $sql =	"SELECT LAST_INSERT_ID() from TBRASSEGNA ORDER BY nProgr DESC LIMIT 1 ";
    $rs= cExeQuery($sql, $Connessione);
    $MyError = cMyError("Errore nell'interrogazione DB a RASSEGNA STAMPA:
    ".$sql);
    $nI=0;
    while($arrBacheca[$nI] = cFetchAssoc($rs)) {
    	$ID = $arrBacheca[$nI]['nProgr'];
    	$nI++;
    }
    echo "Valore Mx di nProgr: " . $ID . "
    ";
    vFreeResult($rs);
    In questo modo generalmente mi estrapola i dati con una semplice select,ma cosi non funziona..mma!!

    Ci sono alcune funzioni,ma non sono le mie...sto solo cercando di modificare questa pagina già realizzata da un'altro collega.

    Se potete aiutarmi.grazie ancora

  8. #8
    ma fammi capire un po'...

    devi sapere qual'e' il MAX() id inserito? oppure sapere qual'e' il prossimo che verra' inserito. Sono due cose totalmente diverse.

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

  9. #9
    devo sapere il prossimo che verrà inserito.
    Ti spiego anche un'altra cosa,come mai ho delle incongruenze di ID in due campi differenti?Sembra arabo ma ti spiego:
    L'ID che si autoincrementa a me serve per nominare un file.pdf prima di fare l'upload.

    Quindi, ci sono alcune volte che,l'ID è perfetto ed altre che SVALVOLA, adesso ho fatto un'inserimento e mi ritrovo con l'ID=151 e il file che si chiama 148.pdf!!
    Per me che non ci capisco, è assurdo, poi sicuramente c'è una spiegazione,ma per gente esperta.

  10. #10
    se ti necessita sapere qual'e' il prossimo id che verra' inserito devi fare SHOW TABLE STATUS come detto prima

    Sempre che qualcun altro non lo usi prima del tuo upload.

    Ma devi considerare un errore "voler" assegnare l'id al nome del file in questo modo. Errore anche volere che il numero id sia legato al nome del file. Sono due valori atomici di scopo e senso d'essere totalmente diverso tra di loro.

    Ad ogni modo questi son fatti tuoi. Sicuramente piu' sicuro e' invece fare in questo modo.

    1) Inserire una tupla nella tabella. (insert)
    2) Leggere l'id assegnato con mysql_insert_id()
    3) Assegnare il nome al file .pdf
    4) Se va tutto a buon fine UPDATE nella tabella del nome_file all'id trovato prima (sempre che sia questo lo scopo).

    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.