2012-06-10 7 views
5

ho una query MySQL come questo:MySQL inserire mutiple righe in base a SELEZIONA risultato della query

dati di uscita
SELECT cp.plan_name, cp.plan_time FROM courses c 
    INNER JOIN course_to_plan cpl ON cpl.course_id = c.course_id 
    INNER JOIN courseplans cp  ON cp.plan_id = cpl.plan_id 
WHERE cpl.course_id = '$course_id'; 

Ciò come ad esempio:

+----------------------------+-----------+ 
| plan_name     | plan_time | 
+----------------------------+-----------+ 
| Plan number one name  |   6 | 
| Plan number two name  |   6 | 
| Plan number three name  |  10 | 
+----------------------------+-----------+ 

voglio queste righe da inserire nel una nuova tabella sull'invio di un modulo.

Come continuare a codificare il codice update.php per inserire i valori nella tabella newtable?

if (isset($_POST['submit'])) { 

$course_id = $_POST['course_id']; 


$course_result = mysql_query 
    ("SELECT cp.plan_name, cp.plan_time FROM courses c 
     INNER JOIN course_to_plan cpl ON cpl.course_id = c.course_id 
     INNER JOIN courseplans cp  ON cp.plan_id = cpl.plan_id 
    WHERE cpl.course_id = '$course_id'"); 

/* I want the result of the above rows to be inserted in the table 
    newtable which has the columns plan_name, plan_time */ 

Odio ammettere che sono completamente inutile in PHP e MySQL ma sto cercando di imparare. Immagino di dover creare una sorta di array per archiviare il risultato e quindi scorrere tra gli inserti ma non so come.

risposta

11

Una cosa che dovete sapere è che il numero di colonne restituite dalla query deve corrispondere al numero di colonne che si desidera inserire nel

"INSERT INTO NewTable(plan_name, plan_time) 
    SELECT cp.plan_name, cp.plan_time 
    FROM courses c 
     INNER JOIN course_to_plan cpl ON cpl.course_id = c.course_id 
     INNER JOIN courseplans cp  ON cp.plan_id = cpl.plan_id 
    WHERE cpl.course_id = '$course_id'" 

Attenzione: guardare fuori per SQL injection attraverso $course_id.

Si noti che ho specificato 2 colonne nella mia dichiarazione INSERT perché il ritorno query SELECT 2 colonne

Se il numero di colonne della tabella corrisponde al numero di colonne restituite dalla query esattamente, allora non è necessario specificare le colonne.

+0

Grazie. Non sapevo che potessi scrivere querys SQL del genere. Ma ora quando lo vedo è così ovvio. Grazie ancora! – David

+0

Prego – codingbiz

+1

So che ho già contrassegnato il tuo commento come risposta ma ho ancora una domanda ... È possibile aggiungere più valori alla query INSERT oltre a quelli creati da SELECT? Diciamo che ho un altro valore $ _POST che voglio essere inserito in un'altra colonna insieme alle righe generate dalla query SELECT. È possibile? – David

3

Non è sicuro circa il codice PHP, ma se si cambia la query mysql a un insert/select dovrebbe funzionare:

INSERT INTO newtable(plan_name, plan_time) 
     SELECT cp.plan_name, cp.plan_time 
     FROM courses c 
     INNER JOIN course_to_plan cpl 
      ON cpl.course_id = c.course_id 
     INNER JOIN courseplans cp  
      ON cp.plan_id = cpl.plan_id 
     WHERE cpl.course_id = '$course_id' 
Problemi correlati