Доброго времени суток. В общем, есть у меня такая необходимость: Имеется таблица:
id, operator, stantion, data, errors, file
Суть заключается в чем - оператор (а их несколько) добавляет файл, и нужно занести это все в табличку. Каждый файл с определенной станции - столбец stantion, и вся загвоздка в том, что нужно заносить в таблицу УНИКАЛЬНЫЕ значения stantion ЗА ДЕНЬ. Т.е если оператор почему-то выгрузил отчет по одной и той-же станции за день два раза, мы второй раз это не пишем в БД. Пытался сделать как:
INSERT INTO import_file (`operator`,`stantion`,`data`,`errors`,`file`) VALUES ('$operator', '$stantion', '$data') WHERE ((SELECT COUNT(*) FROM import_file WHERE `data`='$data' AND `stantion`='$stantion' AND `operator`='$operator') = 0)
Естественно, ничего хорошего, кроме ругани MySQL не получил. Может что-то делаю не так, может я изобретаю велосипед, и для этого есть како-то стандартизированное решение?
Можно примерно так:
INSERT INTO import_file (`operator`,`stantion`,`data`,`errors`,`file`)
select '$operator', '$stantion', '$data'
from (select 1) X
WHERE not exists(SELECT 1 FROM import_file
WHERE `data`='$data' AND `stantion`='$stantion'
AND `operator`='$operator'
)
Или сделайте уникальный индекс по полям data, stantion, operator и попытка вставки дубля в таблицу вернет ошибку, которую вы можете проанализировать и понять что запись была или воспользоваться конструкцией on duplicate key update
.
НО, вы подставляете значения переменных непосредственно в запрос, что приводит к массе проблем и уязвимостей (до половины всех взломов сайтов в интернете происходят именно по этой причине). Поэтому никогда ни одной переменной непосредственно в текст запроса не подставляйте. Вместо этого используйте подготавливаемые запросы и привязку значений (bind_param).
В общем виде:
SELECT COUNT(*) AS total FROM import_file WHERE stantion = $stantion;
if(!total){
INSERT ...
}else{
UPDATE ...
}
Естественно, как отметил @Moonvvell, это в файле модели (или где вы отправляете запросы).
Существует форма для заявки пользователя , где указан атрибут action = "handlerphp"
Здравствуйте, делаю shopping-cart по урокам youtube-пользователя Mindspace (https://wwwyoutube
Доброго времени сутокВозникла следующая загвоздка: