Consiglio su inserimento mysql

Kelly

Utente Attivo
5 Set 2008
112
1
18
Grazie in anticipo.
Ho bisogno di una mano per l'inserimento di record in mysql.

Caratteristiche della tabella:

L' indice primario della tabella è un contatore automatico.
Nella tabella tutti clienti inseriscono le varie righe dell'ordine.
Per l'inserimento delle righe dell'ordine ho pensato di creare un indice univoco formato dai seguenti campi (codcliente, codzona e idrigaordine) dove i campi codcliente e codzona nella fase di inserimento righe avranno lo stesso valore per ciascun cliente e cio che distingue ogni rigaordine dall'tra è il campo idrigaordine che incremento manualmente.
il codice è questo: gli indici li ho impostati direttamente nella tabella.
Codice:
//di seguito prendo il valore piu alto del campo idrigaordine e poi lo incremento per il prossimo inserimento

$querymax = "SELECT *,MAX(INDICEART) as idrigaordine FROM insart WHERE (codcliente= '$codcli'             AND                 codzona = '$coddest')";
	  $resultindice =mysqli_query($connessione,$querymax) or die (mysqli_error($connessione));
	  $row = mysqli_fetch_array($resultindice);
             //questo è il contatore che incremento
	  $ID_RIGA_ORD=($row[idrigaordine ]+1);
	
//ora inserisco le righe dell'ordine di un determinato cliente.
$query = "INSERT INTO insart (codcliente,codzona ,idrigaordine,CODART,DESCRIZIONE)VALUES('$codcliente,'$codzona ,'$idrigaordine,'$CODART,'$DESCRIZIONE')";
$resultriga = mysqli_query($connessione,$query);
if(!$resultriga)
     die(mysqli_error($connessione));

mysqli_close;
// faccio il close una volta sola giusto?

Non so se il codice è corretto, forse manca qualcosa, ad ogni modo il problema che mi sono posta è che se due persone con lo stesso codcliente e codzona inseriscono un ordine nello stesso preciso momento, so che magari è insolito ma se succede io potrei generare dei valori duplicati per il campo idrigaordine, causando una serie di errori a catena, nel database e nella lettura dell 'ordine...come posso evitarlo?

grazie per tutte le eventuali dritte.
grata. :love:
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Il campo idrigaordine è quello che la tabella incrementa automaticamente ?

Se si, dovresti essere stata obbligata a porla come chiave primaria: una chiave primaria non ammette record duplicati in una tabella. Inoltre puoi stare tranquilla, mysql sa come gestire le richieste concorrenti e incrementerà opportunamente gli id evitando duplicati. (In questo caso dovresti omettere la dichiarazione del campo dalla query, altrimenti mysql non effettuerà l'auto_increment ma prenderà il valore che tu gli suggerisci)

Se no, dovresti impostare una chiave unica sul campo e dovresti usare una transazione mysql per chiedere un lock temporaneo della tabella e scrivere le righe relative agli ordini.
 

Kelly

Utente Attivo
5 Set 2008
112
1
18
Ciao e grazie

il campo contatore automatico della tabella si chiama ID, quello manuale si chiama appunto idrigaordine
Ma stavo proprio pensando che mi sto complicando la vita.....perchè non utilizzare direttamente il campo id contatore per le righe ordine? anche se non è sequanziale che mi importa tanto posso raggruppare le righe ordini appartenenenti a un ordine anche grazie ai campi codicecliente e codice zona....giusto?
così evito il lock...o sbaglio?



Il campo idrigaordine è quello che la tabella incrementa automaticamente ?

Se si, dovresti essere stata obbligata a porla come chiave primaria: una chiave primaria non ammette record duplicati in una tabella. Inoltre puoi stare tranquilla, mysql sa come gestire le richieste concorrenti e incrementerà opportunamente gli id evitando duplicati. (In questo caso dovresti omettere la dichiarazione del campo dalla query, altrimenti mysql non effettuerà l'auto_increment ma prenderà il valore che tu gli suggerisci)

Se no, dovresti impostare una chiave unica sul campo e dovresti usare una transazione mysql per chiedere un lock temporaneo della tabella e scrivere le righe relative agli ordini.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Ciao e grazie
il campo contatore automatico della tabella si chiama ID, quello manuale si chiama appunto idrigaordine
Ok

Ma stavo proprio pensando che mi sto complicando la vita.....perchè non utilizzare direttamente il campo id contatore per le righe ordine?

Esattamente, come ti ho scritto utilizzare la colonna incrementata automaticamente da mysql ti risolve un sacco di problemi.

tanto posso raggruppare le righe ordini appartenenenti a un ordine anche grazie ai campi codicecliente e codice zona....giusto?
così evito il lock...o sbaglio?

Tutto giusto :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
S Consiglio si relazione tabelle MS Access 1
A Consiglio curvatura monitor Programmazione 0
G Consiglio su piattaforma forum da utilizzare CMS (Content Management System) 1
A Consiglio per creazione sito web CMS (Content Management System) 1
C [Diagramma E/R] Consiglio su progetto Database 0
sbolde91 Consiglio gestione Hosting Hosting 2
B Richiesta Consiglio E-commerce CMS (Content Management System) 1
A consiglio su telecamere ip wi-fi Presentati al Forum 0
S Consiglio esercizio Javascript Javascript 2
M Consiglio sulla gestione di Gerarchie Database 0
L Consiglio SEO gestione dominio + free hosting SEO e Posizionamento 6
M [DIAGRAMMA ER] Consiglio su progetto Presentati al Forum 1
R Consiglio Hosting per e-commerce Hosting 8
L Ciao, chiedo consiglio Presentati al Forum 1
Web93 RICHIESTA CONSIGLIO - FARE UN SITO WEB CMS (Content Management System) 1
F Consiglio IP camera per timelapse (anche notturno) IP Cam e Videosorveglianza 0
M [PHP] Consiglio su come istanziare un Bottone PHP 0
S [PHP] Richiesta consiglio PHP 1
M Consiglio su problematica impianto videosorveglianza IP Cam e Videosorveglianza 4
M [HTML] consiglio su label e checkbox riguardo l'allineamento HTML e CSS 3
D consiglio evitare truffe Annunci servizi di Social Media Marketing 11
A [Visual Basic] Consiglio sul datagridview Visual Basic 0
G [Diagramma ER] Consiglio su progetto Database 0
G consiglio acquisto telecamera nascosta in sensore allarme IP Cam e Videosorveglianza 0
N Consiglio struttura database WFM Database 1
Q consiglio per python Programmazione 1
C Consiglio configurazione IPCam on line su pagina web IP Cam e Videosorveglianza 2
A Consiglio hosting offshore?? Hosting 3
L Wordpress: consiglio plugin per "verifica disponibilità" WordPress 0
S Consiglio Gestionale/ERP su commessa Windows e Software 0
A Richiesta consiglio per kit videosorveglianza IP Cam e Videosorveglianza 0
D [Photoshop] Consiglio acquisto tavoletta grafica de xp-pen Photoshop 0
R Consiglio rete cablata Reti LAN e Wireless 4
D Consiglio per rete ufficio Reti LAN e Wireless 0
W [CMS] Un consiglio per il CMS più adatto a me CMS (Content Management System) 2
E Consiglio sistema di videosorveglianza IP Cam e Videosorveglianza 0
D [HTML] Consiglio su sito Joomla Joomla 6
M [MS Access] consiglio sviluppo query MS Access 1
D Consiglio su come impostare IP statico Reti LAN e Wireless 0
G [PHP] Consiglio su Qry/array PHP 3
M Consiglio su creazione rete Reti LAN e Wireless 0
trattorino Consiglio e parere Annunci servizi di Social Media Marketing 4
Ibernato Consiglio host Hosting 7
M consiglio sistema di videosorveglianza IP Cam e Videosorveglianza 1
andreas88 Consiglio valore in euro di un Notebook usato Discussioni Varie 3
G consiglio telecamere per esterno IP Cam e Videosorveglianza 4
W Consiglio su gestione di un form con XMLHttpRequest Ajax 0
E Consiglio telecamera wifi motorizzata esterno con power bank IP Cam e Videosorveglianza 5
felino TV Box Android: consiglio su quale acquistare Discussioni Varie 0
A Ciao a tutti, volevo chiedervi un consiglio riguardo l'errore che viene fuori quando tento di lancia Presentati al Forum 1

Discussioni simili