I haven't tried these, but I think there's two things you can do: when a column is auto increment, you don't want to supply a value but you can put NULL as a placeholder. You can put NULL where you'd put a column name in a select, and that value will always be null. So I think this would work:
Code:
$db->query_write("
INSERT INTO ".TABLE_PREFIX."unsub_subscribethread
SELECT NULL,
userid,
threadid,
emailupdate,
folderid,
canview
FROM ".TABLE_PREFIX."subscribethread
WHERE userid = '$id'
AND emailupdate IN (1, 2, 3)");
The other way would be to list each column and leave out the id column, like:
Code:
$db->query_write("
INSERT INTO ".TABLE_PREFIX."unsub_subscribethread
(userid, threadid, emailupdate, folderid, canview)
SELECT userid,
threadid,
emailupdate,
folderid,
canview
FROM ".TABLE_PREFIX."subscribethread
WHERE userid = '$id'
AND emailupdate IN (1, 2, 3)");
BTW, for future reference you can see some of this in the mysql manual, for instance here's the page for the INSERT statement:
http://dev.mysql.com/doc/refman/5.0/en/insert.html