- Home
- Categorie
- Coding e Sistemistica
- PHP
- Autoicrement in tabella
-
Autoicrement in tabella
Ho un piccolo problema con il database (mysql) del mio sito poichè ho modificato manualmente un valore "id" inserendone uno alto.
Allora il valore ID di questo tabella si autoincrementa automaticamente quando viene aggiunto una nuovo valore dal form del sito.
Tempo fa ho alterato il valore ID mettendono uno troppo alto, quindi i successivi valori sono partiti da quello che ho impostato io manualmente.
Ora vorrei cancellare tutti gli ID e vorrei far conteggiare tutti i valori presenti partendo da 1.
Spero di essere stato chiaro.
Grazie!
-
Per quanto ho capito vorresti modificare tutti gli id di una tabella dall'1 in poi, giusto?
Puoi fare un semplice script che ti estrae tutti i record e ti riscrive l'id.[PHP]$query=mysql_query("SELECT id FROM tabella");
$i=1;
while($array=mysql_fetch_array($query)){
$id=$array['id'];
mysql_query("UPDATE tabella SET id='$i' WHERE id='$id' ") or die ("Errore query aggiornamento");
$i++;
}[/PHP]In questo modo setti un numero tramite la variabile i, estrai uno per uno i record della tabella e gli assegni un nuovo id che si incrementerà ad ogni passaggio di 1 ( $i++; )
Non l'ho provato quindi non mi assumo responsabilità!
-
Mi faccio un bel backup e provo...
-
Direi sia il caso
E non dimenticare di caricare la pagina solo una volta!! Se no fa tutto il lavoro più volte! E' uno di quegli script pericolosi che vanno commentati subito dopo l'utilizzo, se non cancellati!
-
Ho provato a fare come dici ma mi da questo errore:
Errore
query SQL:$query = mysql_query(
"SELECT id FROM n5gq_link"
);Messaggio di MySQL:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$query=mysql_query("SELECT id FROM n5gq_link")' at line 1
Ti posto un'esempio di quello che voglio fare:
Situazione attuale:
[PHP]id nomesito url data
1 Sito1 wwwsito1.it 07/05/2011
2 Sito2 wwwsito2.it 08/05/2011
3 Sito3 wwwsito3.it 09/05/2011
1000 Sito4 wwwsito4.it 10/05/2011 <--valore anomalo inserito da me
1001 Sito4 wwwsito5.it 11/05/2011
ecc. [/PHP]Situazione che vorrei fare:(il db riconta tutti i campi id in modo da farli andare in ordine crescente)
[PHP]id nomesito url data
1 Sito1 wwwsito1.it 07/05/2011
2 Sito2 wwwsito2.it 08/05/2011
3 Sito3 wwwsito3.it 09/05/2011
4 Sito4 wwwsito4.it 10/05/2011
5 Sito4 wwwsito5.it 11/05/2011
ecc. [/PHP]Grazie mille!!!
-
Beh, dò per scontato che la connessione al database tu l'abbia fatta, giusto?
Se non è così aggiungi le righe di connessione e sei a posto.
Poi modifica la query in questo modo:
[php]$query=mysql_query("SELECT id FROM tabella")or die("Errore query");
[/php]
e vedi se l'errore sta lì.
-
No spe non sto capendo..non me intendo molto di linguaggio sql..
praticamente io faccio qst procedura:entro nel db
vado sulla tabella che nel mio caso si chiama n5_link
vado su sql
copi ed incollo nel riquadro il tuo script con le relative sostituzioni del caso.Ora il tuo scirpt è divetanto così:
$query=mysql_query("SELECT id FROM tabella")or die("Errore query");
$query=mysql_query("SELECT id FROM tabella");
$i=1;
while($array=mysql_fetch_array($query)){
$id=$array['id'];
mysql_query("UPDATE tabella SET id='$i' WHERE id='$id' ") or die ("Errore query aggiornamento");
$i++;
}giusto??
Grazie mille!!!:D
-
Il codice di connessione è necessario per collegarsi al database. Usa questo:
[PHP]<?
$nome="root";
$psw="root";
$host="localhost";
$db="nomedatabase";$conn=mysql_connect($host,$nome,$psw) or die("Errore nella connessione");
$conndb=mysql_select_db($db,$conn) or die("Errore nella connessione al database");
?>[/PHP]
Dopodiché metti il codice che ti ho postato, ottenendo:[PHP]<?
$nome="root";
$psw="root";
$host="localhost";
$db="nomedatabase";$conn=mysql_connect($host,$nome,$psw) or die("Errore nella connessione");
$conndb=mysql_select_db($db,$conn) or die("Errore nella connessione al database");
$query=mysql_query("SELECT id FROM tabella");
$i=1;
while($array=mysql_fetch_array($query)){
$id=$array['id'];
mysql_query("UPDATE tabella SET id='$i' WHERE id='$id' ") or die ("Errore query aggiornamento");
$i++;
}
?>[/PHP]Cambia i dati di connessione con quelli tuoi.
-
Grazie per la risp..ma dove devo insiere qst codice?
Non devo operare dal phpmyadmin?
mhmhmh
-
No no! Questo è un codice che fa tutto direttamente dal tuo sito web.
Crei una pagina chiamata "aggiustaid.php" e ci copi dentro il codice.
Dopodiché la vai a richiamare (www.tuosito.it/aggiustaid.php) solo una volta. Quando ha finito di caricare chiudi la pagina e controlli nel db traimite phpmyadmin se è tutto a posto.
Phpmyadmin non l'hai mai nominato
-
Ho appena provato lao script ed ho cpoiato tutti il codice il un file php l'hoeseguito ma mi da qst errore:
$query=mysql_query("SELECT id FROM n5gq_link"); $i=1; while($array=mysql_fetch_array($query)){ $id=$array['id']; mysql_query("UPDATE n5gq_link SET id='$i' WHERE id='$id' ") or die ("Errore query aggiornamento"); $i++; } ?>
Grazie per il tempo che stai perdendo!
-
Non sai proprio un h di php!! Il codice php va inserito tra l'apertura e la chiusura del codice php ( rispettivamente <? e ?> ).
Quello che ti ha scritto non è un errore ma il codice che devi inserire tra quei tag!
Copia e incolla in un file php (file.php) questo contenuto, cambiando i valori tra apici ("..") e inserendo i tuoi dati di connessione al database:
[php]<?
$nome="root";
$psw="root";
$host="localhost";
$db="nomedatabase";$conn=mysql_connect($host,$nome,$psw) or die("Errore nella connessione");
$conndb=mysql_select_db($db,$conn) or die("Errore nella connessione al database");
$query=mysql_query("SELECT id FROM tabella");
$i=1;
while($array=mysql_fetch_array($query)){
$id=$array['id'];
mysql_query("UPDATE tabella SET id='$i' WHERE id='$id' ") or die ("Errore query aggiornamento");
$i++;
}
?>[/php]
-
Sorry...!!!
Non conosco il php:DFunziona!!!
Ti ringrazio tantissimo sia per il tempo che ti ho fatto perdere sia per la cortesia delle tue risposte!
Sei davvero bravo!! Grazie mille ancora!!!!
-
L'importante è che ci sei riuscito.
ci sono un pò di video-pillole di php con la base base del php e il suo funzionamento. Se poi ti interessa allora approfondisci ma almeno qualche video guardalo comunque.
Ti chiedo una cosa: guardati qualche pillola su php giusto per capire cosa vedi e come funziona. Poi essere programmatore è un'altra cosa ma almeno quando ti postano qualcosa sai da che parte girarti.
Ciao
-
Ho visto il video molto interessante, lo hai fatto tu ?
Mi sono iscritto al canale!
Grazie ancora!!!
-
Si. Bene, così appena inserisco un nuovo video lo vedi subito
Allora a presto.
-
MI sono accorto solo ora che c'è qualcosa ch enon va, poichè quando gli utenti inviano un sito la procedura va a buon fine ma non compare nel database. Se per faccio un ottimizzazione/controllo/riparazione/analizza il primo invio dopo questa serie di operazione va ma poi non va di nuovo.
Mhhhh
-
@giovannic said:
MI sono accorto solo ora che c'è qualcosa ch enon va, poichè quando gli utenti inviano un sito la procedura va a buon fine ma non compare nel database. Se per faccio un ottimizzazione/controllo/riparazione/analizza il primo invio dopo questa serie di operazione va ma poi non va di nuovo.
MhhhhCredo sia un altro problema questo. A proposito: è possibile che gli id che hai usato prima del "riordino" non saranno più utilizzabili per evitare duplicati. Così, giusto per non farti allarmare inutilmente.
[URL=http://www.giorgiotave.it/forum/gt-world/101972-forum-gt-disponibile-alle-versioni-per-telefoni-cellulari.html]Postato via Mobile
-
E' giusto come dici nella seconda parte della risposta, praticamente avendo immesso manualmente il numero massimo di caratteri (6) e con il 6 caratteri il numero massimo ammissibile è 999999, il sito inviato non veniva memorizzato nel db poichè non poteva andare avanti con l'id. Non so se sono stato chiaro ma ho risolto mettendo il numero corretto da cui il db doveva partire per l'id del sito successo.
NOn so manco come ho fatto a trovare l'inghippo...:D
Grazie!!!!!
-
In questi casi c'è un'unica soluzione, per quel che so: duplica la struttura della tabella "incriminata" e reinserisci i contenuti da capo. Se sono troppi è impensabile ma se invece il numero è limitato te lo consiglio vivamente. Se poi vuoi usare numeri alti usa sempre quelli (es. 50-51-52.. o 100-101-102) senza sovrascrivere nulla.