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

Corvin

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

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

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

спасибо заранее.
 

slach

Новичок
сделай в два запроса =)
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
и посмотреть ругнет или нет
 

RomikChef

Guest
ребята, ну почему вы все время хотите все сделать за один раз?
Корвин, ну кто тебе мешает сеачала отладить запрос селект, который выбирает все емейлы, которых нет в архиве, а потом уже браться за инсерт!

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

чтобы завалить Lolth, надо сначала убить Demogorgon-а
 

chira

Новичок
INSERT INTO archiv SELECT * FROM users LEFT JOIN archiv ON archiv.email = users.email WHERE archiv.email IS NULL
 

Corvin

Новичок
slach не понял дальше как работать с массивом повторяющихся e-mail'ов.

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

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

chira не работает твой запрос.
 

RomikChef

Guest
а тупое Select distinct losers.email from losers,archive where losers.email<>archive.email не пойдет?
 

chira

Новичок
to Corvin:
Ты вообще хорошо умеешь читать?
Я тебе совсем другой SQL написал
 

Corvin

Новичок
Как правильно написать такой запрос:

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();
?
 

chira

Новичок
$idselect нужно всять в скобки

IN ($idselect)

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

Corvin

Новичок
А в остальном запрос написан правильно?

Я не знаю почему, но твой запрос у меня не работает. :( То что я написал перед этим - это относилось к сообщению от slach'a. Возможно не копируется из-за того что отличается ID? я не знаю, я решил оформить все через 2 запроса.
 

chira

Новичок
Автор оригинала: Corvin
INSERT INTO archiv SELECT users.name, users.mail, users.stat FROM users WHERE users.id IN $idselect
в остальном запрос написан правильно

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

Хотя, если уже сделал что бы работало , то вопросов нет ...
 

RomikChef

Guest
а мне интересно, чем мой запрос не подошел.
У меня все-таки короче.
 

Corvin

Новичок
получилось!, всем спасибо:

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' " в твоем примере я ничего не коректировал.
 
Сверху