2012-06-10 10 views
5

Tengo una consulta MySQL como esto:MySQL insertar mutiple filas sobre la base de resultados de la consulta SELECT

datos de salida
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'; 

esto será como por ejemplo:

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

Quiero que estas filas que se insertan en una nueva tabla en un envío de formulario.

¿Cómo puedo seguir codificando mi update.php para que inserte los valores en la tabla 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 admitir que soy completamente inútil en PHP y MySQL, pero estoy tratando de aprender. Supongo que tengo que crear algún tipo de matriz para almacenar el resultado y luego recorrer las inserciones, pero no sé cómo.

Respuesta

11

Una cosa que hay que saber es que el número de columnas que devuelve la consulta debe coincidir con el número de columnas que desea insertar en

"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'" 

Advertencia: cuidado con la inyección de SQL a través $course_id.

Tenga en cuenta que he especificado 2 columnas en mi instrucción INSERT porque el retorno consulta SELECT 2 columnas

Si el número de columnas de la tabla coincide con el número de columnas devueltas por la consulta exactamente, entonces no lo hace necesita especificar las columnas

+0

Gracias. No sabía que podrías escribir consultas SQL así. Pero ahora cuando lo veo es tan obvio. ¡Gracias de nuevo! – David

+0

Sea bienvenido – codingbiz

+1

Sé que ya marqué su comentario como respuesta, pero tengo una pregunta más ... ¿Es posible agregar más valores a la consulta INSERT además de los creados por SELECT? Digamos que tengo otro valor $ _POST que deseo insertar en otra columna junto con las filas generadas por la consulta SELECT. es posible? – David

3

No estoy seguro sobre el código PHP, pero si cambia de consulta MySQL a un insert/select que debería funcionar:

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' 
Cuestiones relacionadas