tablas - obtener nombre de columnas mysql php
mysql mover fila entre tablas (7)
Descubrí que tenía que preparar los datos entre la consulta inicial y la inserción. Esto estaba en un CMS basado en codeigniter, por lo que utiliza sus funciones y formato de retorno, pero puede ayudar a alguien.
function move_row($id = 0) {
/* first copy it from table_one to table_two */
$query = $this->db->query(''select * from table_one where id = '' . $id);
$row = $query->row_array(); /* this appears to be required */
$this->db->insert(''table_two'',$row);
/* then delete it from table_one */
return($this->db->query(''delete from table_one where id = '' . $id));
}
(Bare-bones, sin comprobación de errores, etc.)
Tengo 2 tablas, tabla1 y tabla2.
Tengo una fila en la tabla 1 y quiero moverla a la tabla 2 y eliminarla de la tabla 1. Básicamente, un corte + pasta.
Estoy usando php. Mi plan actual es seleccionar de la tabla 1, almacenar datos en php, insertar en la tabla 2 y luego eliminar de la tabla 1. Esto parece un proceso muy largo.
¿Es esta realmente la mejor manera de hacer esto?
La respuesta corta a la pregunta como se hace, es como mucha gente ya respondió, no.
Pero lo que siento que estás buscando es una forma de insertar en la nueva tabla y eliminar de la antigua en una sola operación. Para esto son las transactions .
Los cambios no se verán afectados hasta que se comprometa la transacción, que tendrá el mismo efecto que si las filas se movieran realmente.
(No se movió internamente en el motor MySQL sino para usuarios / consultas)
Usaría INSERT SELECT y envolvería los comandos en una TRANSACCIÓN algo como esto:
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
BEGIN
ROLLBACK;
CALL ERROR_ROLLBACK_OCCURRED;
END;
START TRANSACTION;
INSERT INTO table_new SELECT a,b,c FROM table_old WHERE x = ''something'';
DELETE FROM table_old WHERE x = ''something'';
COMMIT;
Puede utilizar consultas múltiples de una en una como esta
En el botón de comando que tiene la función de confirmar sus datos en la tabla 1
Utilizar esta:
$query = mysql_query(insert into table1)
En lugar de esto:
mysql_query(insert into table2)
Y bajo la consulta que inserte en la tabla 1 escriba esto:
$query2 = mysql_query(INSERT into TABLE2)
TRUNCATE TABLE TABLE2;
Te da los privilegios para realizar dos consultas una a la vez
Solo haga una tabla y haga un campo de bandera para determinar si el registro está moderado o no.
Entonces, lo único que necesitará es una simple consulta de actualización.
Así es como se hacen esas cosas en general.
Tuve que resolver el mismo problema y esto es lo que usé como solución.
Para utilizar esta solución, la tabla de origen y destino debe ser idéntica, y debe tener una ID única y un incremento automático en la primera tabla (para que la misma ID nunca se reutilice).
Digamos que table1 y table2 tienen esta estructura
| id | field1 | field2
Puedes hacer esas dos consultas:
INSERT INTO table2
SELECT *
FROM table1
WHERE <your_where_clause>
DELETE FROM table1
WHERE table1.id in
(SELECT table2.id
FROM table2)
Me parece que esta es una solución mejor que la sugerida por Pieter888, porque esa solución no tiene en cuenta que los datos seleccionados pueden ser diferentes a los datos eliminados (porque los datos en la tabla 1 pueden cambiar entre la primera y la segunda consulta), mientras de esta manera estas a salvo.
Use INSERT INTO ... SELECT para insertar datos de otra tabla
Vas a necesitar al menos 2 consultas:
INSERT INTO table2 (column_name1, column_name2) SELECT column_name1, column_name2 FROM table 1 WHERE <insert_where_clause_here>
DELETE FROM table1 WHERE <your_where_clause>
No veo una forma más corta de hacer esto usando MySQL