QUERY CON GESTIONE DATI MULTIPLI

di il
12 risposte

QUERY CON GESTIONE DATI MULTIPLI

Ciao a tutti, nuovo del forum.

MI sto imbattendo in una grande difficoltà.

Ho due tabelle con diversi campi univoci(diversi id progressivi) e alcuni campi uguali(nomi, quantità ecc)

Estrapolo da entrambe tramite una query i dati che mi servono cosi da poter riempire una terza tabella con da me creata con i dati da me scelti.

Fatto ciò mi servirebbe capire se è fattibile e nel caso come fare un controllo su ogni campo della tabella creata rispetto a quanto ho in una delle due tabelle già compilate e qualora un campo univoco della nuova tabella sia maggiore di quello presente nella vecchia andarlo a sovrascrivere; in alternatiiva non deve fare nulla.

Spero possiate aiutarmi peché sto diventando matto!

12 Risposte

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    Tabelle e rispettivi campi?

    database?

    credo che quelli con la sfera magica siano occupati con la lotteria…

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    Ciao, perdona il ritardo e grazie per la risposta.

    Apprezzo il sarcasmo :)

    Database MYSQL, le tabelle sono formattate in maniera tale da avere campi univoci(id che identificano in maniera univoca il prodotto) e che ho provato ad utilizzare per creare una relazione oltre ad altri campi come prezzo, quantità e altri

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    @belt94 non si e' capito nulla

    MA, 

    non si puo' fare direttamente. 

    Devi scrivere del codice apposito.

    Comunque e' un'operazione MOOOOOOOLTO strana, quella che hai descritto. 

    Molto probabilmente ci sono orrori concettuali che forzano la scelta implementariva di un tuffo carpiato all'indietro con 4 avvitamenti

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    In pratica:

    TabellaA: id; descrizione; altro

                       1.     Pippo.        Pluto

                        ….    ….               ….

                        N.    Topolino.   Basettoni

    TabellaB: id; descrizione; altro

                       1.    Clarabella.     Orazio

                       ….       …….              …..

                       M.   Paaperoga.    Archimede

    TabellaC: id; descrizione; altro

                        1.     Pippo.        Pluto

                        ….    ….               ….

                        N.    Topolino.   Basettoni

                       1.    Clarabella.     Orazio

                       ….       …….              …..

                       M.   Paaperoga.    Archimede

    Non puoi se usi id numerici progressivi.

    Altrimenti:

    TabellaC: idtabc; id, descrizione; altro

    Ho capito bene?

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    In pratica ho queste due tabelle:

    Tabella 1:

    id_prodotto; nome_prodotto; quantita_fisica;

    Tabella 2:

    id_prodotto;id_movimento_prodotto;data;segno(indica se quantità rimossa o aggiunta); 

    Premesso ciò dovrei relazionare le due tabelle e l'ho fatto utilizzando l'id_prodotto e portandomi dietro i campi che mi servono;

    Successivamente vado sempre nella query a fare una piccola operazione, nello specifico da quantita fisica vado a fare un count per id_prodotto e rimuovo o aggiungo le quantità dal campo segno, andando a creare un campo nuovo.

    Inoltre con la funziona MAX mi estraggo l'id_stock movimento ultimo in quella data

    La query utilizzata è la seguente:

    SELECT ps.id_stock, ps.reference, ps.physical_quantity,pm.id_stock_mvt, pm.date_add, pm.id_stock, SUM(pm.sign) As TotalSold , MAX(pm.id_stock_mvt) as id_mvt
                        FROM ps_stock ps, ps_stock_mvt pm 
                        WHERE pm.date_add > (NOW() - INTERVAL 1 DAY) 
                        AND ps.id_stock = pm.id_stock
                        GROUP BY ps.id_stock  
                        ORDER BY ps.id_stock ASC;";

    Da qua estraggo ciò che mi serve che utilizzo per andare prima a fare un insert in una nuova tabella(per riempire la prima volta) e successivamente andrò a fare un update dei valori.
    La difficoltà che trovo è nel gestire l'update.
    Nel senso che dovrei impostare una condizione tramite PHP per cui se l'ultimo id_movimento_prodotto è già stato “letto” non deve aggiornare la tabella altrimenti deve farlo inserendo il valore ricavato dalla query.

    Spero di essere stato più chiaro :)

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    15/02/2024 - belt94 ha scritto:


    Ho due tabelle con diversi campi univoci(diversi id progressivi) e alcuni campi uguali(nomi, quantità ecc)

    bastava master/detail…

    22/02/2024 - belt94 ha scritto:


    WHERE pm.date_add > (NOW() - INTERVAL 1 DAY) 

    eee???

    22/02/2024 - belt94 ha scritto:


    id_prodotto; nome_prodotto; quantita_fisica;

    a che ti serve q.tà fisica? 

    22/02/2024 - belt94 ha scritto:


    id_prodotto;id_movimento_prodotto;data;segno(indica se quantità rimossa o aggiunta);

    segno?? contiene + e - o PIU e MENO o AUMENTA e DIMINUISCE?

    usa Carico e scarico carichi quando compri o quando il cliente rende la merce, scarichi quando vendi o rendi la merce al fornitore.

    22/02/2024 - belt94 ha scritto:


    SUM(pm.sign)

    presumo sia da -x a +x

    22/02/2024 - belt94 ha scritto:


    Da qua estraggo ciò che mi serve che utilizzo per andare prima a fare un insert in una nuova tabella(per riempire la prima volta) e successivamente andrò a fare un update dei valori.

    in che senso? utilizzi un'ulteriore tabella? non bastano quelle due?

    22/02/2024 - belt94 ha scritto:


    La difficoltà che trovo è nel gestire l'update.
    Nel senso che dovrei impostare una condizione tramite PHP per cui se l'ultimo id_movimento_prodotto è già stato “letto” non deve aggiornare la tabella altrimenti deve farlo inserendo il valore ricavato dalla query.

    aggiungi un timestamp… update bla bla where datidacopiare.timestamp>datidaricevere.ultimamodifica (così forse è più intuitivo).

    tuttavia, ma se la q.tà la fai aggiungere con unica sql? se il vecchio dato è 10 e il nuovo è 10 che ti frega se lo sostituisce con lo stesso valore?

    Prova a fare una sql update, io il tempo di decifrare campi e tabelle appena sono al pc ti abbozzo una base di sql. poi il resto di cosa ti serve ce lo metti tu.

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    Le tabelle che utilizzo sono tabelle preimpostate da prestashop e non create da me pertanto evito di modificarle.

    Il campo quantità fisica mi serve per fare l'operazione che faccio, inoltre il campo segno può essere sia positivo che negativo.

    La terza tabella mi serve per avere sempre un quadro completo e poter andare a fare dei controlli interni.

    Cosa non è chiaro di questo “WHERE pm.date_add > (NOW() - INTERVAL 1 DAY) ”?

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    22/02/2024 - belt94 ha scritto:


    Cosa non è chiaro di questo “WHERE pm.date_add > (NOW() - INTERVAL 1 DAY) ”?

    Avevo letto male.. 

    Sinceramente non ho mai sbirciato sulle tabelle di PS.

    22/02/2024 - belt94 ha scritto:


    Le tabelle che utilizzo sono tabelle preimpostate da prestashop e non create da me pertanto evito di modificarle

    Ok, questo spiega la tabella aggiuntiva.

    22/02/2024 - belt94 ha scritto:


    La difficoltà che trovo è nel gestire l'update.
    Nel senso che dovrei impostare una condizione tramite PHP per cui se l'ultimo id_movimento_prodotto è già stato “letto” non deve aggiornare la tabella altrimenti deve farlo inserendo il valore ricavato dalla query.

    Quindi la query di sopra funziona?

    Manca solo l'aggiornamento alla tua tabella?

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    Sisi funziona tutto unico pass aggio che mi manca è questo

    “La difficoltà che trovo è nel gestire l'update.
    Nel senso che dovrei impostare una condizione tramite PHP per cui se l'ultimo id_movimento_prodotto è già stato “letto” non deve aggiornare la tabella altrimenti deve farlo inserendo il valore ricavato dalla query.”

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    Rieccomi…

    CREATE TABLE ps_stock (
      id_stock INTEGER PRIMARY KEY,
      physical_quantity DOUBLE NOT NULL,
      reference TEXT NOT NULL
    );
    
    CREATE TABLE ps_stock_mvt (
      id_stock_mvt INTEGER PRIMARY KEY,
      date_add DATE NOT NULL,
      id_stockf integer, 
      sign DOUBLE NOT NULL
    );
    
    INSERT INTO ps_stock VALUES (0001, 20, 'ARTICOLO 1');
    INSERT INTO ps_stock VALUES (0002, 5, 'ARTICOLO 2');
    INSERT INTO ps_stock VALUES (0003, 12, 'ARTICOLO 3');
    INSERT INTO ps_stock_mvt VALUES (0001, '2024-02-01', 0001, 5);
    INSERT INTO ps_stock_mvt VALUES (0002, '2024-02-01', 0001, 7);
    INSERT INTO ps_stock_mvt VALUES (0003, '2024-02-02', 0001, -1);
    INSERT INTO ps_stock_mvt VALUES (0004, '2024-02-01', 0001, -5);
    INSERT INTO ps_stock_mvt VALUES (0005, '2024-02-01', 0002, 5);
    INSERT INTO ps_stock_mvt VALUES (0006, '2024-02-01', 0003, 7);
    INSERT INTO ps_stock_mvt VALUES (0007, '2024-02-03', 0002, -1);
    INSERT INTO ps_stock_mvt VALUES (0008, '2024-02-01', 0003, -5);

    giusto per usare i campi interessati ed inserire qualche dato di prova ottengo:

    +----------+-------------------+------------+
    | id_stock | physical_quantity | reference  |
    +----------+-------------------+------------+
    |        1 |                20 | ARTICOLO 1 |
    |        2 |                 5 | ARTICOLO 2 |
    |        3 |                12 | ARTICOLO 3 |
    +----------+-------------------+------------+
    +--------------+------------+-----------+------+
    | id_stock_mvt | date_add   | id_stockf | sign |
    +--------------+------------+-----------+------+
    |            1 | 2024-02-01 |         1 |    5 |
    |            2 | 2024-02-01 |         1 |    7 |
    |            3 | 2024-02-02 |         1 |   -1 |
    |            4 | 2024-02-01 |         1 |   -5 |
    |            5 | 2024-02-01 |         2 |    5 |
    |            6 | 2024-02-01 |         3 |    7 |
    |            7 | 2024-02-03 |         2 |   -1 |
    |            8 | 2024-02-01 |         3 |   -5 |
    +--------------+------------+-----------+------+	

    la query che hai fatto non funziona: controlla i messaggi di errore.

    Poichè ho tanto altro da fare, potresti dirmi, in soldoni, cosa vorresti ottenere?

    SELECT reference, sum(sign), date_add 
    from ps_stock_mvt 
    inner join ps_stock on id_stockf=id_stock
    group by id_stockf, date_add

    risultato:

    +------------+-----------+------------+
    | reference  | sum(sign) | date_add   |
    +------------+-----------+------------+
    | ARTICOLO 1 |         7 | 2024-02-01 |
    | ARTICOLO 1 |        -1 | 2024-02-02 |
    | ARTICOLO 2 |         5 | 2024-02-01 |
    | ARTICOLO 3 |         2 | 2024-02-01 |
    | ARTICOLO 2 |        -1 | 2024-02-03 |
    +------------+-----------+------------+

    Le due tabelle sono di prestashop?

    fammi sapere.

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    Ciao,

    la query a me funziona, comunque in soldoni diciamo mi serve capire se estrapolati dei valori dinamicamente da una query, vi è un modo per verificare e gestire che qualora l'id_stock_movimento è già presente in una terza tabella non deve essere aggiornata, viceversa se non presente deve fare l'update di quel rigo specifico(che gestisco tramite il reference che non è altro che il nome prodotto ed è pertanto univoco)

  • Re: QUERY CON GESTIONE DATI MULTIPLI

    UPP

Devi accedere o registrarti per scrivere nel forum
12 risposte