Php 如何存储用户首选项以供进一步查询?

Php 如何存储用户首选项以供进一步查询?,php,Php,我想实现一个邮件系统,发送我的注册用户 新博客文章与其配置的首选项匹配时的通知 当用户配置他们的首选项时,基本上会在下面创建一个SQL查询, 但我觉得在数据库中存储SQL查询并不是非常干净/安全的。除非别人告诉我 此外,如果我在将来添加更多过滤器的标准,我需要一个能够很好扩展的解决方案 我的一个想法是将包含所有WHERE数据的PHP数组序列化() 这是实现这一目标最有效的方法吗?或者还有其他解决办法吗 先谢谢你 附言:我不是在找邮寄图书馆。我只是想知道如何以最有效的方式设计我的应用程序 编辑:

我想实现一个邮件系统,发送我的注册用户 新博客文章与其配置的首选项匹配时的通知

当用户配置他们的首选项时,基本上会在下面创建一个SQL查询, 但我觉得在数据库中存储SQL查询并不是非常干净/安全的。除非别人告诉我

此外,如果我在将来添加更多过滤器的标准,我需要一个能够很好扩展的解决方案

我的一个想法是将包含所有
WHERE
数据的PHP数组
序列化()

这是实现这一目标最有效的方法吗?或者还有其他解决办法吗

先谢谢你

附言:我不是在找邮寄图书馆。我只是想知道如何以最有效的方式设计我的应用程序

编辑: 我收到了两个类似的答案,提供了相同的解决方案。恐怕我的问题要复杂一点

如果我只添加可能的标记首选项,那么解决方案就会起作用

如果我想使特定筛选成为可能,例如:
UserB
希望在发布标记为
html
的帖子时得到通知,并且至少有一条
评论(或投票),该怎么办

这就是为什么我说SQL查询基本上是在用户选择其首选项时创建的

作为参考,我添加了链接


谢谢。

你为什么不在你的博客上使用一个只有一个自动增量id字段和一个电子邮件字段的表格,然后是一个简单的电子邮件输入

你有用户表吗

编辑:我认为您需要第二个名为
user\u preferences
的表,该表具有
id
+
id\u user
+
标记
如下:

id | id_user | tag
1  |    1    | php
2  |    1    | html
3  |    2    | php
然后


序列化是一种选择。我碰巧也遇到了类似的情况,管理层希望得到一份关于搜索最多的内容的报告。所以我必须查询整个表并构建数组,然后从大型数组中生成报告……这不是处理它的最佳方式

我更新了系统,使之有一个表,其中的字段/值列对应于所使用的过滤器类型,然后是它的值。然后编写一个函数将这些转换为查询

因此,在您的示例中,该用户id的“tag”、“php”和“tag”、“database querys”表中将有一个条目

以下内容与我使用(编辑处理问题更改)的内容类似:


然后,我就可以运行常见搜索报告等。无论如何,对我来说效果更好。

我想你把我的问题搞错了。我将给你一个例子:
UserA
config当(并且仅当)一篇文章包含
php
数据库查询
标记时,它的首选项是接收通知电子邮件。这些首选项必须存储在数据库中。最有效的方法是什么?@ggregoire,是的,我有一个用户表。@ggregoire,谢谢你的回答。明天上班时我会看一看。@ggregoire,谢谢你的解决方案。我已经编辑了我的问题。使我的问题更加复杂。谢谢你的解决方案。我已经编辑了我的问题。使我的问题更加复杂。可能可以添加一个
条件
列,其中包含类似
的内容=
并创建一个函数,根据可能的条件以及默认的
=
条件构建查询……但是,是的,可能是一个更优雅的解决方案。
SELECT DISTINCT email
FROM user
INNER JOIN user_preferences ON id_user = user.id
WHERE tag IN ('tag1', 'tag2', 'tag3');
CREATE TABLE `user_prefs` (
  `user_pref_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `type` varchar(255) NOT NULL,
  `condition` varchar(10) DEFAULT '=' NOT NULL,
  `value` varchar(255) NOT NULL,
  PRIMARY KEY (`user_pref_id`)
);

INSERT INTO `user_prefs` (`user_id`, `type`, `value`) VALUES ({UserA}, 'tag', 'php');
INSERT INTO `user_prefs` (`user_id`, `type`, `value`) VALUES ({UserA}, 'tag', 'database-queries');
INSERT INTO `user_prefs` (`user_id`, `type`, `value`) VALUES ({UserB}, 'tag', 'html');
INSERT INTO `user_prefs` (`user_id`, `type`, `condition`, `value`) VALUES ({UserB}, 'comments', '>', '1');