Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Consiglio query

  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    Consiglio query

    Ciao,
    sto creando una procedura di ordine per un B2B.
    Nella tabella carrello ho tutte le righe di ordine con il relativo id dell'agente.
    Nel momento in cui l'agente invia l'ordine vado a salvare i dati di quell'ordine (data consegna, pagamento ecc...) nella tabella ordini e successivamente nel carrello vado ad impostare gli articoli come "ordinati".

    Volendo però creare uno storico ordini mi servirebbe che nel momento dell'insert nella tabella ordini riuscissi ad avere l'idordine in modo da metterlo nel carrello e poter poi fare un join tra le tabelle.
    Ho modo dopo un insert di recuperare l'id della riga appena inserita?

    In alternativa pensavo di creare un id con data+ora+minuti+secondi+codiceagente e fare un join tra quei campi, ma l'idea non mi esalta.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sì, ma per il come fare dipende da cosa usi per interfacciarti al database: mysqli_ o PDO?

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Utilizzo mysqli così:

    Codice PHP:
    $qwt "INSERT INTO `ordini` (`campo1`, `campo2`, `campo3`, `campo4`, `campo5`, `campo6`, `campo7`, `campo8`, `campo9`, `campo10`, campo11) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    $result $connessione->prepare($qwt);
    $par = array($idclientev$ragionesociale$idclientes$ricevente$indirizzoricevente$data$altredate$pagamento$descpagamento$note$idmioordine);
    $result->bind_param('isissssissi'$par[0], $par[1], $par[2], $par[3], $par[4], $par[5], $par[6], $par[7], $par[8], $par[9], $par[10]);
    $result->execute(); 
    Questo è ciò che faccio per il primo insert. Utilizzo un array per i parametri perchè dopo ho una funzione che mi salva la query in un file di log.
    Attualmente ho creato un idordine (che non è quello principale della tabella) dato da: giorno(2cifre)+mese(2cifre)+anno(4cifre)+ora(2)+mi nuti(2)+secondi(2)+numero random da 1 a 9+codiceordinante(tutto numerico)
    Inserendo quello nella tabella ordini, dopo farei l'update della tabella carrello, ma se si potesse recuperare l'id dell'insert appena fatto non sarebbe male.
    Preciso che un ordinante è impossibile che faccia più di un ordine al minuto (in ogni caso nel mio id ho messo i secondi + un numero random), mentre invece potrebbe essere che due persone facciano un ordine nello stesso momento.

    Grazie

  4. #4
    non ti bastava un id numerico auto incrementante https://dev.mysql.com/doc/refman/5.7...increment.html così fa tutto mysql?

  5. #5
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Le due tabelle hanno già il loro id univoco autoincrementale.
    Il problema che devo metterle in relazione in base all'id della mia ultima insert. Non potendo conoscere (almeno se c'è il modo non lo so) ho creato un id univoco dato dalla somma di diversi fattori.
    Ho escluso di andare a calcolare l'id prendendo l'ultimo+1 perchè in uno stesso momento possono esserci più ordini da diverse persone.
    Ammetto che la soluzione non mi esalta al 100% e per questo chiedevo lumi.

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    C'è insert_id/mysqli_insert_id

    http://php.net/manual/en/mysqli.insert-id.php

  7. #7

Tag per questa discussione

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.