【发布时间】:2013-10-14 06:13:52
【问题描述】:
我完全了解表列中的how bad it is to have Delimited Lists,而不是将数据规范化到多个表中。
虽然,我确实有一个 几年前设计的表结构,我很快会重新设计。
简化后如下所示:
Table: Newsletters
+------------+---------------+
| subject | mailing_lists |
+------------+---------------+
| A Test | 1,2 |
| More Tests | 2,3 |
+------------+---------------+
如果您愿意,可以在 SQLFiddle 中看到它。
最近,我让我的用户可以选择编写邮件列表 ID 的分隔列表 (如 1,3),作为选择要显示哪些时事通讯的功能在视图中。
(例如,仅显示发送到 id 为 1 或 3 的列表的新闻通讯)
所以:带有分隔的 id 列表的表格列,以及作为输入的分隔 id。
如果表格被规范化,这显然会容易得多。
所以,我在 PHP 中解决了这个问题,方法是分解输入 id 并对其进行迭代以创建类似于 fiddle mentioned above 中的查询,如下所示:
SELECT * FROM `newsletters`
WHERE FIND_IN_SET("1", `mailing_lists`) > 0
OR FIND_IN_SET("3", `mailing_lists`) > 0
此查询完美地获取了我想要获取的数据,但我只能以编程方式创建它,因为我必须为分隔列表中的每个 id 添加一个新条件。
问题是:纯粹出于好奇:有没有办法避免 PHP 中的循环,并在不拆分代码中的 id 的情况下进行查询?
【问题讨论】: