Newsgroup: it.comp.www.php
Titolo: uniformare gli id autoincrementanti di due tabelle in mysql

salve a tutti,
vengo subito al dunque... esiste un modo per uniformare gli id
autoincrementanti di due tabelle in mysql.... faccio un esempio, io ho
due tabelle
prodotti
prodotti_non_presenti
vorrei che l'id autoincrementante della tabella prodotti non sia mai
uguale al'id autoincrementante della tabella prodotti_non_presenti...
in pratica come se le due tabelle fossero una e lavorassero in
sequenza...
quindi se io inserisco 3 record nella prima tabella e uno nella
seconda, l'id della seconda deve essere 4
facciamno finta che inserisco 3 record nella prima tabella
es.
tabella prodotti
id----prodotti
1----prodotto1
2----prodotto2
3----prodotto3
a questo punto l'id 1, 2, 3 sono già stati occupati dalla prima
tabella, quindi se inserisco un record nella seconda tabella, l'id non
deve ripartire da uno (come se la tabella fosse indipendente dalla
prima) ma da 4
tabella prodotti_non_presenti
id----prodotti
4----prodotto1
successivamente se inserisco un altr' prodotto nella prima tabella,
l'id sarà 5 perchè il 4 è già stato occupato
tabella prodotti
id----prodotti
5----prodotto1
e cosi via
se non sbaglio in postgress esiste un sistema di sequenze
è possibile farlo su mysql??

 prodotti_non_presenti
Non puoi semplicemente aggiungere un campo bool che indica se il
prodotto e' presente o meno?
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 Vieni a fare uno stage con noi:
http://www.creativepark.it/stage/
in che senso, potresti farmi un piccolo esempio??

 prodotti_non_presenti
a parte il suggerimento di Filippo il problema posto si risolve 
facilmente utilizzando la stessa sequenza ad esempio prod_seq per 
generare gli id delle tabelle.
insert into prodotti values (nextval(prod_seq),...);
insert into prodotti_non_presenti values (nextval(prod_seq),...);
insert into prodotti values (nextval(prod_seq),...);
fa esattamente quello che ti serve
ciao
Mauro

 
hdmcompu...@gmail.com
 ha scritto:> salve a tutti,

filippo forse ha capito male quello che intendevo perchè si è
soffermato a interpretare il nome della tabella e non la reale
domanda... la tabella prodotti_non_presenti poteva chiamarsi anche
prodotti2... si chiama "non presenti" per una sua logica non perchè
voglio rendere invisibili dei prodotti all'utente...
Quindi quel che interessa a me, non è nascondere un prodotto o
visualizzarlo, sennò avrei utilizzato il metodo di filippo senza
nemmeno pensarci.
invece a me interessa proprio uniformare gli id autoincrementati delle
due tabelle, come se le due tabelle prodotti avessero una sola
sequenza di id. in questo modo evito di avere dei duplicati di id.
il metodo che tu mi hai esposto l'ho capito in parte....
1. ma esiste la funzione nextval() in mysql??
2. non ho capito come faccio a dare la stessa sequenza

oppure mi è venuta in mente un idea....chiedo a voi un parere per
eventuali problemi che potrei riscontrare..
potrei creare una tabella che chiamo sequenza_prodotti e ogni volta
che inserisco un nuovo prodotto, prima effettuo una insert sulla
tabella sequenza (inmodo tale da generarmi un id), con
mysql_insert_id() mi prendo l'id dell'ultima insert fatta da me sulla
tabella sequenza.... successivamente faccio la insert sulla tabella
prodotti dei dati relativi al prodotto e associo a quel prodotto l'id
che ho reperito prima.... in questo modo indipendentemente su che
tabella faccio la insert, i prodotti avranno sempre un id univoco
che ne pensate come alternativa??

 sequenza di id. 
Probabilmente non ti e' ben chiaro il motivo dell'esistenza dei campi
autoinc.
Se vuoi gestire in modo autonomo l'ID dei tuoi record non puoi
utilizzare dei campi autoinc. Puoi gestire la cosa come suggerito da
Mauro oppure creando esternamente gli ID da utilizzare di volta in
volta.
Infine, sei davvero sicuro di quello che stai facendo? Quale e' il
problema che intendi risolvere con una operazione del genere?
Le chiavi primarie di due tabelle separate non dovrebbero essere legate
nel modo in cui stai cercando di farlo.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/


 Vieni a fare uno stage con noi:
http://www.creativepark.it/stage/
allora ti spiego in parola molto povere quello che sto cercando di
fare....
sto realizzando un applicazione web che permetta di fare la lista
nozze on-line..
I negozi con noi convenzionati, possono registrarsi sul nostro sito e
inserire il loro catalogo prodotti, prodotti che vanno a finire sulla
tabella prodotti..
A questo punto gli sposi possono crearsi la loro lista selezionando e
aggiungendo i prodotti dai vari negozi convenzionati.
Se ad esempio un prodotto di un negozio convenzionato non è presente
in catalogo ma è disponibile in negozio, l'utente deve avere la
possibilità di inserirlo lui manualmente, automaticamente il prodotto
viene associato a quel negozio ma può essere visto solo dall'utente
che lo ha inserito..
a questo proposito ho dovuto creare un'altra tabella prodotti che
prende il nome di "prodotti_non_presenti", perchè, appunto, non sono
presenti in catalogo.
ho pensato di creare un'altra tabella per due motivi
1. perchè non mi andava di incasinare la tabella dedicata al catalogo
prodotti dei negozi
2. perhcè, anche se la tabella "prodotti_non_presenti" è identica a
quella dei prodotti, ho dovuto apportare una sola differenza, cioè
quella di inserire colonna  id_utente, che mi permette di far
visualizzare i prodotti solo di quell'utente e non anche quelli
inseriti manualmente da altri..
dopo aver inserito il prodotto e le sue info, si passa all'aggiunzione
dei prodotti alla lista nozze..
la tabella "lista_nozze" conterrà, oltre a tante info, una colonna
id_prodotto che mi permette di collegare un prodotto alle due
tabelle.
A questo punto sorge il problema....avendo due tabelle prodotti
distinte, è naturale che si possa avere uno stesso numero di id e
questo renderebbe impossibile sapere se un prodotto è della tabella
"prodotti" o della tabella "prodotti_non_presenti".
es.
tabella prodotti
id---nome_prodotto
1---prodotto_1
2---prodotto_2
3---prodotto_3
tabella prodotti_non_presenti
id---nome_prodotto
1---prodotto_1
2---prodotto_2
3---prodotto_3
scusa la spiegazione molto semplicistica ma se dovessi spiegarti
quello che c'è dietro all'intera analisi del db staremo qui per 2
giorni consecutivi....
grazie per l'aiuto

 "prodotti" o della tabella "prodotti_non_presenti".
Anche qui la soluzione che hai scelto non e' molto logica. Volendo
mantenere le due tabelle prodotti, e' sufficiente aggiungere un campo
che indichi che il campo id_prodotto si riferisce alla prima o alla
seconda tabella ed agire di conseguenza in fase di query (es. tramite
UNION).
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/


 Vieni a fare uno stage con noi:
http://www.creativepark.it/stage/
la soluzione dell'union l'avevo pensata ma è meglio fare, come dici, i
controlli sui campi.... il fatto è che avevo pensato ai controlli ma
poi una cosa semplice la faccio diventare complicata...
per eventuali problemi mi faccio sentire
grazie mille