[PHP] Problemi con query unione

Max61

Utente Attivo
2 Mar 2014
674
3
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
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
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:

Max61

Utente Attivo
2 Mar 2014
674
3
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
 

Max61

Utente Attivo
2 Mar 2014
674
3
18
Ciao Marino51, allora mi sa che non è possibile fare quello che ho in mente, perché le due tabelle sono svincolate ed indipendenti...
 

Max61

Utente Attivo
2 Mar 2014
674
3
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
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
mi aggiorna il campo stato della tabella tbltablet con il valore campo stato della tabella tblmateriali come vorrei che fosse
si, ma stai attento perché tra le due tabelle non c'é attinenza, penso che il risultato che ottieni sulla tbltablet sia casuale

Se invece la lancio dalla pagina php non funziona
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)
 

Max61

Utente Attivo
2 Mar 2014
674
3
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
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
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'