1

我对 MYSQL 的了解相当基础,希望能提供以下帮助:

子记录模式

编号 | 记录 | 元素 | 标题 | 姓名 | 类型 | 价值

上表存储通过 Web 表单提交的数据。

  • 每行是一个字段(即“电话号码”、“电子邮件”、“主题”等),其中“标题”是字段的标签,“值”是提交字段的内容
  • “记录”标识每个唯一提交的表单,它是下面阐明的“记录”表(records.id)的外键(相同的表单提交多次生成多个唯一记录)
  • 要知道提交了哪个表单,我们需要查看另一个表

记录模式

编号 | 提交 | 表格 | 标题 | 姓名

  • id对每个提交都是唯一的(不是每个表单唯一的,同一个表单提交多次生成多个唯一的id)
  • form 是另一个表(forms.id)的外键,它定义了表单的结构(所有字段等),并没有真正简化检索我需要的数据。
  • records.name 是一个文本字符串,用于标识每个唯一的表单,这是选择我们要查找的表单所必需的

我需要找到多次提交相同表单的所有用户(通过电子邮件),这里有一些进一步的说明:

  • 所有电子邮件地址(subrecords.value,其中 subrecords.title = 'email')
  • 提交了多个相同的表单(由 records.name = "string-form-name" 标识)。
  • subrecords.record = record.id 只需要加入表格(每个表单提交都是唯一的并生成一个新的record.id,因此对于识别用户和表单都没有帮助)。
  • records.form 是一个外键 = forms.id (它似乎没有用,因为它通过需要查看另一个表使查询复杂化,使用 records.name 来识别表单似乎更简单)

到目前为止,感谢另一个用户,我有这个:

SELECT value     as email
      ,record
      ,COUNT(*)  as form_count
  FROM subrecords
 WHERE title = 'email'
   AND record IN (SELECT id
                    FROM records
                   WHERE name = 'form_name'
                 )
 GROUP BY value
         ,record
HAVING COUNT(*) > 1

它返回一个空值,但我无法缩小如何改进它以使其工作。谢谢

4

1 回答 1

1

我认为问题在于您按record. 给定的记录只有一种形式。

但是,您的查询将通过从 切换injoin. 另外,我不清楚您是否有特定的表单名称。如果是这样,则and r.name = 'form_name'on子句中添加:

SELECT r.form, s.value as email, COUNT(distinct s.record)  as form_count
FROM subrecords s join
     records r
     on s.record = r.id
WHERE s.title = 'email'
GROUP BY s.value, r.form
HAVING form_count > 1;
于 2013-09-15T12:51:55.050 回答