запрос на частичное копирование из одной таблицы в другую?

  • Автор темы Автор темы Corvin
  • Дата начала Дата начала

Corvin

Новичок
запрос на частичное копирование из одной таблицы в другую?

Необходимо постоянно пополнять архив, но так чтобы пользователи уже записаные в архиве туда не попадали. Как должен выглядеть запрос, а точнее условие WHERE?

INSERT INTO archiv SELECT * FROM users WHERE archiv.email != users.email

спасибо заранее.
 
сделай в два запроса =)
SELECT DISTINCT email FROM archiv;

потом пройдись по результату в php и сформируй массив $archiv_emails[]

а потом сделай
PHP:
mysql_query('INSERT INTO archiv SELECT users.* FROM users WHERE archiv.email NOT IN ("'.implode('","',$archiv_emails).'")');

а вообще можешь попробовать
REPLACE INTO archiv SELECT * FROM users WHERE archiv.email != users.email
и посмотреть ругнет или нет
 
ребята, ну почему вы все время хотите все сделать за один раз?
Корвин, ну кто тебе мешает сеачала отладить запрос селект, который выбирает все емейлы, которых нет в архиве, а потом уже браться за инсерт!

У тебя проблема-то в селекте, а не в инсерте.

чтобы завалить Lolth, надо сначала убить Demogorgon-а
 
INSERT INTO archiv SELECT * FROM users LEFT JOIN archiv ON archiv.email = users.email WHERE archiv.email IS NULL
 
slach не понял дальше как работать с массивом повторяющихся e-mail'ов.

Запрос: mysql_query('INSERT INTO archiv SELECT users.* FROM users WHERE archiv.email NOT IN ("'.implode('","',$archiv_emails).'")');
не работает.

Помимо того что делать с полем "id" они должны отличаться в двух таблицах archiv и users?

chira не работает твой запрос.
 
а тупое Select distinct losers.email from losers,archive where losers.email<>archive.email не пойдет?
 
to Corvin:
Ты вообще хорошо умеешь читать?
Я тебе совсем другой SQL написал
 
Как правильно написать такой запрос:

PHP:
$idselect ="2,5,6,7,9,11,15"; 

INSERT INTO archiv SELECT users.name, users.mail, users.stat  FROM users WHERE users.id IN $idselect

не вставлять же все новые записи по одной через
PHP:
FOR();
?
 
$idselect нужно всять в скобки

IN ($idselect)

Можно поинтересоваться, чем тебе мой запрос не нравиться?
 
А в остальном запрос написан правильно?

Я не знаю почему, но твой запрос у меня не работает. :( То что я написал перед этим - это относилось к сообщению от slach'a. Возможно не копируется из-за того что отличается ID? я не знаю, я решил оформить все через 2 запроса.
 
Автор оригинала: Corvin
INSERT INTO archiv SELECT users.name, users.mail, users.stat FROM users WHERE users.id IN $idselect
в остальном запрос написан правильно

Свой пример я проверил и он работает.
Ты корректировал мой запрос или пробовал как я написал без изменений?
Если корретировал , то покажи чего у тебя получилось...

Хотя, если уже сделал что бы работало , то вопросов нет ...
 
а мне интересно, чем мой запрос не подошел.
У меня все-таки короче.
 
получилось!, всем спасибо:

2 запроса:
----------
PHP:
SELECT distinct zusers.id, zusers.email from zusers, zarchiv where zusers.email=zarchiv.email

$id
- массив из zusers.id

PHP:
INSERT INTO zarchiv SELECT '', zusers.name, zusers.email FROM zusers WHERE zusers.id NOT IN ($id)
проблема была в том, что я не знал как при копировании менять ID.

to RomikChef: я не знаю почему, но при выборе с помощью <> результат SELECT выдается неправильный - выдаються все поля.
to chira: у меня выдается ошибка при выполнении - " Not unique table/alias: 'archiv' " в твоем примере я ничего не коректировал.
 
Сверху