2011-01-24 56 views
5

Necesito ayuda sobre un método para insertar valores en una sola columna en filas diferentes.SQL - Insertar múltiples valores de fila en una sola columna

En este momento, tengo una serie implosión que me da un valor como este:

('12', '13', '14')

Esos números son los nuevos ID de los cuales deseo insertar en el DB.
El código Solía ​​implosionar la matriz es la siguiente:

$ combi = "('.implode (" ''"., $ Caja) "')"; // Donde caja de $ es la matriz inicial

La consulta de las cuales voy a utilizar queda atascado aquí:

mysql_query (" INSERT INTO studentcoursedetails (studentID) VALORES

Una opción sería repetir esto, pero no puedo, porque la matriz se repetirá, puede haber 3 ID, puede haber 20.
Un bucle no parece correcto. Cualquier ayuda sería apreciada.

+1

Debe usar un bucle y una base de datos _normalizada_. Una columna que contiene valores múltiples no está normalizada. – Oded

+0

Un bucle es exactamente la forma en que debe resolver esto, consulte http://php.net/manual/en/control-structures.foreach.php – Andomar

Respuesta

3

Para insertar más de un valor en una tabla se debe utilizar (valor 1), (valor2) sintaxis:

$combi = "('".implode("'), ('",$box)."')"; 

PD: Esta función se denomina constructores de datos fila y está disponible desde SQL-92

+2

¿Oracle terminó de implementar SQL-92? Valores admitidos por SQL Server (..), (..) solo desde 2008 en adelante – RichardTheKiwi

+0

No creo que agreguen una nueva sintaxis para eso. Ya hay dos formas de hacer esto en el oráculo, que encontré aquí: http://stackoverflow.com/questions/883706/inserting-multiple-rows-into-oracle – meze

2

¿Puede usted no hacer algo como esto:

for($x = 0; $x < count($box); $x++) 
{ 
    mysql_query("INSERT INTO studentcoursedetails (studentID) VALUES ($box[$x]); 
} 

Esto funciona directamente sobre la matriz, insertar una nueva fila para cada valor en la caja $ y también evitar la necesidad de implosionar la matriz a un delimitado por comas cadena

Almacenar identificadores como una cadena delimitada por comas puede parecer inicialmente un modelo simple, pero a largo plazo esto le causará problemas cuando intente trabajar con una base de datos no normalizada.

+0

En realidad, la sugerencia de cyberkiwi es mejor ya que esto solo requiere una llamada de 1 DB mientras que la mía requeriría Sin embargo, hay muchos valores que hay en la matriz. Ambos logran exactamente lo mismo, pero la solución cyberkiwis generaría menos carga tanto en PHP como en MySQL. – MrEyes

1

Aún puede crear la declaración mediante implosión. Simplemente no use VALORES; NEGOCIO Selección de lugar

$combi = " ".implode(" UNION ALL SELECT ",$box)." "; // Where $box is the initial array 
mysql_query("INSERT INTO studentcoursedetails (studentID) SELECT " . $combi) 

El SELECT .. union es portable a través de muchos DBMS.

Nota sobre los ID: si son números, no los cite.

0

Compruebe si hay una variante de la función mysql_query que operará en un parámetro de matriz.

2

Algunos sabores de SQL permiten inserciones compuestas:

insert into studentcoursedetails (studentid) values 
    (1), 
    (2), 
    (3), 
2

Si está utilizando MySQL, se pueden insertar varios valores en una sola frase:

sql> insert into studentcoursedetails (studentID) 
    > values (('12'), ('13'), ('14')); 

Por lo tanto, sólo tiene que acumulación esa cadena en PHP y listo.

Cuestiones relacionadas