[PHP] Problemi con query unione

Discussione in 'PHP' iniziata da Max61, 20 Maggio 2019.

  1. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Salve, come da titolo ho problemi con la query unione che allego sotto, ovviamente non mi aggiorna il campo Stato nella tabella tbltablet
    PHP:
    UPDATE
    tbltablet
    INNER JOIN
    tblmateriale
    ON
    tbltablet
    .Stato tblmateriale.Stato
    SET
    tbltablet
    .Stato tblmateriale.Stato
    WHERE
    tblmateriale
    .Rilevatore ='$Rilevatore' AND tblmateriale.Anno='$Anno'
    Mi sapete aiutare?
    Grazie
    Max61
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    non potrà mai funzionare, perché vuoi rendere uguale il valore di queste due colonne,
    SET tbltablet.Stato = tblmateriale.Stato
    e se lo fai, vuol dire che i valori sono diversi,
    quindi non potrà mai essere vera la condizione
    ON tbltablet.Stato = tblmateriale.Stato

    ti scrivo la query in modo diverso,
    PHP:
    UPDATE tbltablet t
    SET t
    .Stato = (
    SELECT m.Stato
    FROM tblmateriale m
    WHERE m
    .? = t.?
    AND 
    m.Rilevatore ='$Rilevatore'
    AND m.Anno='$Anno'
    LIMIT 1)
    devi però sistemare la condizione nella riga "WHERE" perché nella tua query non é indicata

    ATTENTO ad eseguirla perché manca una clausola "WHERE" che limiti l'update
    ovvero tutti gli elementi della tabella "t" vengono aggiornati
    secondo me, se la esegui così, ottieni risultati errati

    considera anche che la select che restituisce il valore, ne deve restituire 1 solo !

    forse é meglio che descrivi cosa ti serve a parole, senza scrivere una query ….
     
    Ultima modifica di un moderatore: 20 Maggio 2019
  3. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Grazie Marino51, infatti è meglio che ti spieghi a parole
    Ho due tabelle con lo stesso campo $stato
    tbltablet
    tblmateriale
    in pratica vorrei che quando aggiorno il campo $stato della tabelle tblmateriale in contemporanea mi aggiornasse il campo $stato della tabella tbltablet ovviamente deve aggiornare la riga corrispondente, quindi o LIMIT 1 oppure WHERE id='$id'.
    Grazie
    Max61
     
  4. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    pubblica per cortesia, la query con cui fai l'operazione
    ed i nomi dei due campi chiave che legano tblmateriali e tbltablet
     
  5. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Ciao Marino51, allora mi sa che non è possibile fare quello che ho in mente, perché le due tabelle sono svincolate ed indipendenti...
     
  6. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Ciao Marino51, ho provato la tua query, se la lancio da phpmyadmin mi aggiorna il campo stato della tabella tbltablet con il valore campo stato della tabella tblmateriali come vorrei che fosse.
    Se invece la lancio dalla pagina php non funziona

    PHP:
    UPDATE tbltablet t
    SET t
    .stato = (
    SELECT m.stato
    FROM tblmateriale m
    WHERE t
    .Rilevatore m.Rilevatore
    AND m.Rilevatore ='$Rilevatore'
    AND m.Anno='$Anno'
    LIMIT 1)
    mi sai dare una dritta sul motivo?
    Grazie
    Max61
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    si, ma stai attento perché tra le due tabelle non c'é attinenza, penso che il risultato che ottieni sulla tbltablet sia casuale

    credo ci sia un errore nella scrittura del codice php,
    pubblica il codice dove é presente la query e la sua esecuzione (il pezzetto di codice php che contiene la query)
     
  8. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Ho fatto altre prove e passandogli i parametri nome e anno direttamente aggiorna i campi dei record interessati ma cancella quello scritto negli altri record...CONFUSIONE TOTALE.
    O mi dai una dritta su come correllare le due tabelle o lasciamo perdere
     
  9. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    tu dovresti conoscere la relazione ( o le relazioni ) che lega le due tabelle,
    inoltre non le hai mai pubblicate, non so cosa contengono, come posso aiutarti ?
     
  10. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Allego le tabelle che adesso indipendenti.
    Grazie ancora
    Max61
     

    Files Allegati:

  11. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    prova queste soluzioni, secondo me, potrebbero funzionare entrambe (ma ti ricordo che non ho mySql)
    sol 1
    Codice:
    UPDATE tbltablet
       SET stato =
    (
    SELECT stato
      FROM tblmateriale
     WHERE Rilevatore = tbltablet.Rilevatore
       AND Anno = tbltablet.Anno
     LIMIT 1
    )
     WHERE Rilevatore = 'Max61'
       AND Anno = '2019'
    
    sol 2
    Codice:
    UPDATE tbltablet
       SET tbltablet.stato = tblmateriale.stato
      FROM tblmateriale
     WHERE tbltablet.Rilevatore = tblmateriale.Rilevatore
       AND tbltablet.Anno = tblmateriale.Anno
       AND tblmateriale.Rilevatore = 'Max61'
       AND tblmateriale.Anno = '2019'
     
  12. Max61

    Max61 Utente Attivo

    Registrato:
    2 Marzo 2014
    Messaggi:
    615
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    FUNZIONA!!!
    Grazie Marino51
     
Sto caricando...

Condividi questa Pagina