Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310

    come inserire nel database più righe con stesso ID?

    sto facendo un gestionale per una sagra, e per la compilazione della tabella degli ORDINI (più di un piatto ordinato) ho questo problema

    codice:
    Array
    (
        [0] => Array
            (
                [0] => "maccheroni"
                [1] => 5
                [2] => 3
                [3] => 15
            )
    
        [1] => Array
            (
                [0] => "gnocchi"
                [1] => 5
                [2] => 3
                [3] => 15
            )
    
         [2] => Array
            (
                [0] => "pasta fritta"
                [1] => 10
                [2] => 3
                [3] => 30
            )
    )
    gestisco cosi l'insermento di più righe, con un ciclo foreach

    codice:
    foreach($array as $key => $value)
    {	
        $piatto_ordinato = $value["piatto"];
        $id_piatto = $value["id piatto"];
        $quantita = $value["quantita"];	
        $prezzo_singolo = $value["prezzo singolo"];
        $prezzo_totale = $value["prezzo totale"];
        $query = "INSERT INTO ordini (id_piatto, piatto_ordinato, quantita_ordinata, prezzo_singolo, prezzo_totale) 
    VALUES ($id_piatto, '$piatto_ordinato', $quantita, $prezzo_singolo, $prezzo_totale)";
    
    if ($db->GetDatabaseResult($query))
    {
    	echo "INSERIMENTO AVVENUTO";
    }
    }
    ottengo un risultato del genere


    tabella ORDINI

    id_ordine - id_piatto - piatto_ordinato - quantita_ordinata - prezzo_singolo- prezzo_totale

    0 - 5 - maccheroni- 5 - 3 - 15
    0 - 12 - gnocchi - 5 - 3 - 15
    0 - 18 - pasta fritta - 10 - 3 - 30

    e fin qua va bene. Queste righe fanno parte di uno stesso ordine, quindi 0 deve essere comune. Come posso realizzare questa cosa per tutti gli ordini successivi? Non posso mettere id_ordine AUTO_INCREMENT perchè (nel caso di sopra) avrei 0 - 1 - 2 sotto id_ordine invece di 0 - 0 - 0

    un grazie a chi saprà aiutarmi
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  2. #2
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767

    proposta

    Io aggiungerei un'altra tabella che contenga solo gli Id dell'ordine incrementato con autoincrement. Eventualmente aggiungi dei campi che ti possono servire ad uso statistico (data, idcassiere...).
    Da questa tabella vai a pescare l'id da inserire nella tabella che hai già.


    Luca

  3. #3
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310

    Re: proposta

    Originariamente inviato da Luke70
    Io aggiungerei un'altra tabella che contenga solo gli Id dell'ordine incrementato con autoincrement. Eventualmente aggiungi dei campi che ti possono servire ad uso statistico (data, idcassiere...).
    Da questa tabella vai a pescare l'id da inserire nella tabella che hai già.


    Luca
    avevo pensato ad una cosa del genere anch'io, ma volevo vedere se riuscivo a semplificare tutto avendo tutto su una tabella.

    Se nessuno saprà darmi qualche dritta, penso che dovrò fare un altra tabella.
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Magari è una stupidaggine... ma la dico lo stesso

    Si potebbe usare un contatore $i che incrementi ad ogni ciclo e poi lo inseririsci nella tabella nel campo id_ordine

    Codice PHP:
    $i=0//inizializzo un contatore
    foreach($array as $key => $value) {         
    $piatto_ordinato $value["piatto"];    
    $id_piatto $value["id piatto"];     
    $quantita $value["quantita"];         
    $prezzo_singolo $value["prezzo singolo"];     
    $prezzo_totale $value["prezzo totale"];     
    $query "INSERT INTO ordini (id_ordine, id_piatto, piatto_ordinato, quantita_ordinata,
    prezzo_singolo, prezzo_totale)  VALUES (
    $i$id_piatto, '$piatto_ordinato', $quantita$prezzo_singolo$prezzo_totale)";  
    if (
    $db->GetDatabaseResult($query)) {     
    echo 
    "INSERIMENTO AVVENUTO";
    i++; //questo vedi se metterlo solo dopo un'esecuzione riuscita o prima... 


    Non ho la possibilità di provarlo, vedi se funziona...

  5. #5
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767

    alternativa

    Un'idea alternativa è quella di generare un id casuale unico. Io utilizzo

    Codice PHP:
    function GetId(){
        return 
    md5(uniqid(rand(), true));

    (eventualmente puoi verificare se è effettivamente unica sul DB, ma non ho mai avuto problemi di collisione)

    Se gli ordini li fai utilizzando pagine diverse, puoi memorizzare l'Id su cookie o sessioni

  6. #6
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    casuale non mi serve, mi serve che sia incrementale a partire da uno..

    per la numerazione degli ordini in sequenza
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  7. #7
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Originariamente inviato da clasku
    Magari è una stupidaggine... ma la dico lo stesso

    Si potebbe usare un contatore $i che incrementi ad ogni ciclo e poi lo inseririsci nella tabella nel campo id_ordine

    Codice PHP:
    $i=0//inizializzo un contatore
    foreach($array as $key => $value) {         
    $piatto_ordinato $value["piatto"];    
    $id_piatto $value["id piatto"];     
    $quantita $value["quantita"];         
    $prezzo_singolo $value["prezzo singolo"];     
    $prezzo_totale $value["prezzo totale"];     
    $query "INSERT INTO ordini (id_ordine, id_piatto, piatto_ordinato, quantita_ordinata,
    prezzo_singolo, prezzo_totale)  VALUES (
    $i$id_piatto, '$piatto_ordinato', $quantita$prezzo_singolo$prezzo_totale)";  
    if (
    $db->GetDatabaseResult($query)) {     
    echo 
    "INSERIMENTO AVVENUTO";
    i++; //questo vedi se metterlo solo dopo un'esecuzione riuscita o prima... 


    Non ho la possibilità di provarlo, vedi se funziona...
    eh, ma cosi è come se avessi un campo auto_increment. Per lo stesso ordine (prendiamo l'esempio di sopra) ottengo 1-2-3.

    questo ciclo viene fatto per un ordine che può avere più piatti.

    Primo ordine -> 1

    Secondo ordine -> 2

    forse dovrei fare un calcolo tipo CALCOLA MAX id_ordine e incrementalo di 1. :master:
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  8. #8
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Se vuoi un id incrementale la soluzione più rapida è quella di utilizzare un'altra tabella.

  9. #9
    Se quello che vuoi fare serve per la stampa di scontrini saprai sicuramente che esistono, a basso costo, dei registratori che fanno tutto quello che chiedi...

    Diversamente di un id_ordine non associato ad un id_cliente non riesco ad immaginarne l'utilita'.

    Quindi farei con "id_cliente - id_ordine" (due campi) associati come chiave primaria autoincrement in modo tale da avere l'associazione:

    id_cliente - id_ordine

    1 - 1
    1 - 2
    1 - 3

    2 - 1
    2 - 2
    2 - 3

    3 - 1
    ecc...

    ad ogni nuovo id_cliente riparte la conta degli ordini (da 1 e non da 0 ... che non avrebbe senso l'id 0 in un autoincrement)

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

  10. #10
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Originariamente inviato da piero.mac
    Se quello che vuoi fare serve per la stampa di scontrini saprai sicuramente che esistono, a basso costo, dei registratori che fanno tutto quello che chiedi...
    ehm.. cioè? questi vogliono due pc e un programmino

    Originariamente inviato da piero.mac
    Diversamente di un id_ordine non associato ad un id_cliente non riesco ad immaginarne l'utilita'.

    Quindi farei con "id_cliente - id_ordine" (due campi) associati come chiave primaria autoincrement in modo tale da avere l'associazione:

    id_cliente - id_ordine

    1 - 1
    1 - 2
    1 - 3

    2 - 1
    2 - 2
    2 - 3

    3 - 1
    ecc...

    ad ogni nuovo id_cliente riparte la conta degli ordini (da 1 e non da 0 ... che non avrebbe senso l'id 0 in un autoincrement)
    a me non interessa averne due, uno mi basta.

    id_cliente
    id_ordine
    id_nome_che_vi_pare

    id_cliente è uguale ad id_ordine, per me è la stessa cosa.. Quindi me ne serve solo uno.

    o forse mi sono perso un passaggio :master:

    mi riquoto da sopra

    id_ordine - id_piatto - piatto_ordinato - quantita_ordinata - prezzo_singolo- prezzo_totale

    1 - 5 - maccheroni- 5 - 3 - 15
    1 - 12 - gnocchi - 5 - 3 - 15
    1 - 18 - pasta fritta - 10 - 3 - 30

    id_ordine è quello che mi serve.
    Poi faccio l'ordine successivo, e vorrei che non fosse più uno bensi 2, indipendentemente dal numero di righe (piatti ordinati)
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

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.