我有表'电子邮件'和行'kategorija'存储的值(它们在行'kategorija'中的表'proizvodi')中来自复选框。
在行中,“电子邮件”是用户存储的电子邮件,用户可以查看复选框(表'proizvodi'中的值,行'kategorija'),选中的值存储在'kategorija'行的表'电子邮件'中。
当新产品(它具有'alati,satovi和其他'等值)被添加到数据库中时,我需要以某种方式自动发送电子邮件,其中包含“kategorija”中的新产品可用的信息,该用户在复选框中选择了用户存储在表'电子邮件'中的地址。
表'电子邮件':
CREATE TABLE IF NOT EXISTS `emails` (
`id` int(15) NOT NULL,
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL,
`kategorija` varchar(255) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表'proizvodi':
CREATE TABLE IF NOT EXISTS `proizvodi` (
`id` int(11) NOT NULL,
`naziv` varchar(55) CHARACTER SET utf8 DEFAULT NULL,
`cijena` decimal(8,2) DEFAULT NULL,
`slika` text CHARACTER SET utf8,
`opis` text CHARACTER SET utf8,
`kategorija` enum('alati','glazbeni_instrumenti','smartphone','laptop','fotoaparat_kamera','tehnicka_roba_ostalo','sportska_oprema','satovi','kucanski_aparati','ostalo_ostalo') CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=196 DEFAULT CHARSET=latin1;
答案 0 :(得分:0)
我可能不能正确理解这个问题。我认为这很简单:
插入新产品时,请检索其产品ID和类别。
然后从电子邮件中选择电子邮件,其中kategorija所在的类别为'%%',以获取要使用的电子邮件。
最后迭代这些电子邮件地址,并用您喜欢的语言发送带有您最喜欢的电子邮件库的电子邮件。
您可能找到了更好的解决方案来存储电子邮件的多个类别,现在我可以看到您使用的是纯字符串。它不是完全防火箭的,你应该在(尚未定义的)类别表和电子邮件表之间使用n:n关系,并使用(尚未定义)类别表作为外键而不是使用硬编码的枚举在表中定义产品的类别。拥有专用的类别表允许您随时添加更多类别,而无需更改任何代码或表结构。
我(虽然我也不是英语母语人士)发现了一个非常好的想法,可以使用简单的英语术语表名,列名,以及变量等。这使您可以稍后介入其他开发人员。
其他一些数据库,例如Oracle有一个内置的过程语言,允许您直接从数据库发送电子邮件。在插入新产品时将其与数据库触发器相结合,您可以在大约10行PL / SQL代码中实现此整个功能。
我发现Oracle非常值得它的价格,如果你买不起,Oracle XE是免费提供的。借助内置的PL / SQL语言和许多内置包,它使面向数据库的应用程序开发变得轻而易举。这提供了比例如速度快两倍的速度。在繁重的I / O事务应用程序中使用Hibernate和MySQL。
答案 1 :(得分:0)
抱歉,无法在MySQL中实现您的目标。请参阅https://stackoverflow.com/questions/31667462/how-to-send-an-email-from-mysql-using-a-stored-procedure了解原因。
通过使数据库将电子邮件输出到文件中,然后由另一个应用程序处理,可能的解决方法如下所述:How to send email from MySQL 5.1
另一种解决方法是创建一个可以从产品表上的触发器调用的自定义UDF。用户定义函数(UDF)允许您从数据库中调用外部代码,这样您就可以实现所需的任何功能。
如果您可以使用Oracle,则内置的UTL_MAIL包允许您直接从数据库发送电子邮件,例如从产品表上的触发器发送。 发送电子邮件的示例如下:http://www.orafaq.com/wiki/Send_mail_from_PL/SQL
答案 2 :(得分:0)
我创建了新表' obavijest'。
CREATE TABLE IF NOT EXISTS `obavijest` (
`id` int(10) unsigned NOT NULL,
`email` varchar(255) COLLATE utf8_bin NOT NULL,
`kategorija` varchar(255) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

在桌面'电子邮件'我创建了触发器来自动发送值到表obavijest。
CREATE TRIGGER `obavijesttrig` AFTER INSERT ON `emails`
FOR EACH ROW BEGIN INSERT INTO obavijest (id, email, kategorija)
VALUES (NEW.id, NEW.email, NEW.kategorija);
END

唯一剩下的就是创建一个用于从表格中获取电子邮件的PHP脚本' obavijest'并发送到此电子邮件地址并使用cron job运行它。