2017-02-23 8 views
0

У меня есть некоторые данные в таблице MySQL, как это:Как создать правильный запрос INSERT MySQL

2017-02-01: 'A': 'K1': 100 
2017-02-01: 'A': 'K2': 200 
2017-02-01: 'B': 'K1': 300 
2017-02-02: 'A': 'K1': 110 
2017-02-02: 'A': 'K2': 210 
2017-02-02: 'B': 'K1': 310 

мне нужно вставить новые данные, только если последнее значение (по дате), не совпадает с новым. , например: insert new 400 if last [A:K1]<>400

я использую 2 запросов в настоящее время для этой работы, но это очень медленно, чтобы вставить его:

$res=mysql_query("select * from `table` where `col1`='A' and `col2`='K1' order by 'date' desc limit 1"); 
$tkol=0; 
if($res){while($r=mysql_fetch_assoc($res)){$tkol=$r[0]['col3']; break;}} 
if($tkol!=$newVal){ 
$q="INSERT INTO `table` (`date`,`col1`,`col2`,`col3`) VALUES ('2017-02-10','A','K1',$newVal)"; 
mysql_query($q); 
} 

как написать свою задачу в 1 MySQL-запрос как "INSERT ... IF ..."? Пожалуйста, помогите мне.

ответ

0

Попробуйте использовать INSERT INTO SELECT синтаксис:

INSERT INTO `table` (`date`,`col1`,`col2`,`col3`) 
SELECT DISTINCT '2017-02-10', 'A', 'K1', $newVal 
FROM `table` t1 
JOIN (
    SELECT MAX(`date`) AS maxdate, `col1`, `col2` 
    FROM `table` 
    WHERE `col1` = 'A' 
    AND `col2` = 'K1' 
) t2 ON t1.`col1` = t2.`col1` AND t1.`col2` = t2.`col2` AND t1.`date` = t2.`maxdate` 
WHERE t1.`col1` = 'A' 
AND t1.`col2` = 'K1' 
AND t1.`col3` <> $newVal 
+0

спасибо, я попробую сегодня – mogican

+0

Спасибо друг! Он работает правильно !!! Я восхищен! Спасибо за помощь! Сценарий – mogican

+0

с вашим запросом имеет больше времени выполнения. можете ли вы оптимизировать больше? – mogican

0

использовать значительную колонку как unique key и использовать REPLACE вместо INSERT.

ИЛИ

Вы можете использовать insert ... from select ... where oldval <> newval;

select не будет иметь «от», и значения будут прямо записаны в него с веб-сервера.


$q="INSERT INTO `table` (`date`,`col1`,`col2`,`col3`) select ".$date.", ".$a.", ".$b.", ".$c." WHERE not exists (select 1 from `table` where col1 = $a ... and date = select(max) date from table)"; 

И, помните о проверке ввода!

+0

я не могу установки эти столбцы как уникальный. У меня есть уникальный столбец «id». Другие столбцы не могут быть уникальными. – mogican

+0

Затем используйте https://dev.mysql.com/doc/refman/5.7/en/insert-select.html – klepzers

+0

Кроме того, помните, что уникальные ключи могут содержать более одного столбца! – klepzers

Смежные вопросы