Prueba con:
<?php
...
INSERT INTO tabla1
SELECT
NULL, -- Los ids no deberian compartirse a menos que sea muy necesario
campo1,
campo2
FROM tabla1
');
Desde la misma query puedes insertar haciendo un select por debajo, esto vuelca directamente los datos de una tabla a otra seleccinando los campos que necesitas, de hecho desde el select puedes hacer un order by o un limit como gustes o joins, generalmente lo uso cuando debo llenar tablas para los cache. Si haces esto desde php no sabrás si tienes 1 dato o un millón y pasar un millón de registros a la memoria vía php podría ser fatal, en ves de eso deja que mysql se encargue de traspasar fila por fila sin dejar sin aliento a tu servidor.
Si quieres pasar un solo dato puedes usar un where y si quieres unir datos relacionados puedes usar group_concat:
INSERT IGNORE INTO usuarios_b
SELECT
id,
nombre,
correo,
GROUP_CONCAT(telefonos SEPARATOR ", ") as telefonos
LEFT JOIN telefonos ON (telefonos.usuario_id = usuarios_a.id)
FROM usuarios_a
WHERE usuarios_a.id = 157894
GROUP BY usuarios_a.id
');
Digamos que usuarios_a tiene una tabla relacional con todos los telefonos del usuario, en la tabla usuarios_b tendrá los telefonos separados por coma en un solo campo desnormalizado vs usuarios_a que si estaba normalizado. El ignore es para que no arroje error si ya existía, si se quiere renovar se puede unir con un drop o un update en ves de insert. Puse left join en ves de inner join porque talves el usuario no tiene telefonos, en ese caso el campo queda nulo y la tabla usuarios_b debería tener el campo telefonos nullable y usuarios_b denbería llevar un foregin key relaiconado con el id de la tabla de usuarios_a con un on-update y on-delete en cascade para hacer joins mas rápidos con innodb.
Por favor intenten dejar de usar mysql_ y usen mysqli_ o el objeto mismo de mysqli ya que mysql_ se declaró obsoleto en las nuevas verisones de php5.