Update con condizione SQL

Maxilboss93

Nuovo Utente
7 Gen 2020
15
1
3
Ho una tabella "quiz" strutturata così:


Questa tabella ha centinaia di righe in cui vi sono dei quiz, ogni quiz è diviso per listato, ma ho fatto un errore, ho caricato dei dati della colonna Libro3 in tutti quelli con listato= AB a mano a uno a uno, ho appena finito se non fosse che mi sono accorto che il listato utilizzato dal mio sito è listato=AB1, che è la stessa cosa del listato=AB con degli aggiornamenti, le due parti di tabella sono praticamente uguali, hanno ifatti in comune, blocco cioè ad esempio a blocco=0044 di AB c è la stessa cosa di blocco=0044 di AB1 , così vale per altri campi tra cui info2 e commento, come posso fare a inserire nel campo Libro3 di AB1 il corrispondente del quiz di AB? Basta una query o devo fare uno script PHP? non so dove sbattere la testa!
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
nel titolo parli di update,

poi leggo il testo e cerco di interpretarlo,
Questa tabella ha centinaia di righe in cui vi sono dei quiz,

ogni quiz è diviso per listato,

ma ho fatto un errore, ho caricato dei dati della colonna Libro3 in tutti quelli con listato= AB

a mano a uno a uno, ho appena finito

se non fosse che mi sono accorto che il listato utilizzato dal mio sito è listato=AB1,
che è la stessa cosa del listato=AB con degli aggiornamenti,

le due parti di tabella sono praticamente uguali,

hanno ifatti in comune,

blocco cioè ad esempio a blocco=0044 di AB c è la stessa cosa di blocco=0044 di AB1 ,

così vale per altri campi tra cui info2 e commento,

come posso fare a inserire nel campo Libro3 di AB1 il corrispondente del quiz di AB?

Basta una query o devo fare uno script PHP?
sinceramente capisco poco, ma estraggo questa riga

"come posso fare a inserire nel campo Libro3 di AB1 il corrispondente del quiz di AB? "

è questo il problema ?

in caso di risposta positiva,

bisogna capire come si identificano (SELECT) gli elementi del del quiz di AB

questi elementi identificati da una select che ti invito a scrivere vanno poi
inseriti ( nel campo Libro3 di AB1 ) come elementi nuovi della tabella o come update di elementi già esistenti ?
 

Maxilboss93

Nuovo Utente
7 Gen 2020
15
1
3
Provo a fartiu un esempio pratico,

Codice:
$sql="SELECT * FROM quiz WHERE `listato`= 'AB' OR `listato`='AB1'  
                                ORDER BY `quiz`.`Commento`  ASC";
con la seguente query ottengo le righe dell' AB che hanno già l' informazione Libro3 e sotto la corrispondente riga di AB1 della stessa tabella quiz senza l' informazione, in pratica ho bisogno per ogni doppione di queste righe di duplicare il valore di Libro3 da sopra a sotto!
 

Allegati

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
puoi indicare le colonne che identifica in modo univoco ciascuna riga,
esempio
listato, id, blocco ......
 

Maxilboss93

Nuovo Utente
7 Gen 2020
15
1
3
Allora, idquiz è un numero progressivo di tutti i listati, blocco, commento, testo lingua 1,2,3 , aiuto e foto che vedi nell' immagine sono identica sia per listato AB che AB1, come posso rendere identico anche il Libro3? Quell' 0086 che è nella riga sopra lo vorrei anche nella riga sotto e così tutti gli altri, se noti infatti cambia solo la colonna listato.
Ho bisogno che tutti quei Libro3 su AB siano messi nel corrispondente Libro3 di AB1 della stessa tabella quiz
 

Maxilboss93

Nuovo Utente
7 Gen 2020
15
1
3
Ho provato tramite PHP così, ora non so come fare l' insert però!

Codice:
require('includes/config.php');

   
$conn = myDB::open();


$sql="SELECT * FROM quiz WHERE `listato`= 'AB' 
                                ORDER BY `quiz`.`Commento`  ASC";

$result = $conn->query($sql);

foreach ($result as $row)
{
    echo $row['Blocco'].": ".$row['Libro3']."<br/>";
}

$sql2="SELECT * FROM quiz WHERE listato='AB1' ORDER BY `quiz`.`Commento`  ASC";
$result2 = $conn->query($sql2);

foreach ($result2 as $row2)
{
    echo $row2['Blocco'].": ".$row2['Libro3']."<br/>";
}

if(($row['Blocco']==$row2['Blocco'])&&($row['Testo']==$row2['Testo'])&&($row['Commento']==$row2['Commento'])){
    //qui ci va l'insert
}
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
lascia perdere php, scrivi una query, che ti estragga tutte le righe che da "AB" devono diventare "AB1"
( quindi con le clausole where necessarie )
ed anzichè l'asterisco (select *) metti l'elenco dei campi che dovrai scrivere come AB1

con php devi fare la stessa cosa, ma con il problema del linguaggio in più

la query che scrivi e che posti qui provala con il tool di sql, devi essere certo di estrarre TUTTI e SOLO gli elementi necessari da inserire come AB1
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
le query che ho visto nel php, non mi sembrano idonee ad estrarre quello che serve,

hai risolto in qualche modo ?

avevo in mente questi passaggi,

creare una query per estrarre i record necessari (set "AB")
creare una tabella "prova" identica a quella che contiene "AB" e "AB1"
insert / select nella tabella di prova
VERIFICA della bontà dei dati estratti e inseriti nella tabella "prova"
update della colonna da "AB" ad "AB1" nella tabella prova (ed eventuali altre colonne se necessario)
la tabella "prova" é veramente ok ?
se la risposta é affermativa, insert / select dalla tabella prova alla tabella di lavoro
eliminazione della tabella prova

sono pochi e semplici passaggi per evitare guai e muoversi in sicurezza
 
  • Like
Reactions: Maxilboss93