0

鉴于我了解 MYSQL 的基础知识,我将不胜感激以下方面的帮助:

表 -> 子记录模式

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

该表存储通过 Web 表单提交的数据。每行是一个字段,“记录”是标识每个唯一提交表单的字段,表单的标题存储在另一个表中:

表 -> 记录架构

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

我需要找到多次提交相同表单的所有用户(通过电子邮件):

(感谢@gwc 的帮助)

  • 所有电子邮件地址(subrecords.value,其中 subrecords.title = 'email')
  • 提交了多个相同的表单(由“string”record.title =“form-name”标识)。
  • subrecords.record = record.id 只需要加入表格(每个表单提交都是唯一的并生成一个新的record.id,因此对于识别用户和表单都没有帮助)。
  • records.form 是一个外键 = forms.id

谢谢

4

2 回答 2

1

我不是 sql pro 或其他任何人,但我不知道您的查询中发生了什么:)

但是试一试。

编辑:

SELECT sr.Value
    , COUNT( sr.* )
FROM Subrecords sr
    JOIN Records r
       ON sr.record = r.id
      AND r.Title = 'form_name' 
WHERE sr.Title = 'email'
GROUP BY sr.Value
HAVING COUNT( sr.* ) > 1

我无法完全理解您的表格发生了什么,因此如果表格超过 1 个,这将不会得到您想要的。

于 2013-09-06T15:44:47.050 回答
0

针对其他要求进行了更新

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

原来的

假设subrecords和records的关系是subrecords.record = records.id:

SELECT s.value   as email
      ,r.id
      ,r.title
      ,COUNT(*)  as form_count
  FROM records r
  JOIN subrecords s
    ON s.record = r.id
   AND s.title = 'email'
 GROUP BY s.value
         ,r.id
         ,r.title
HAVING COUNT(*) > 1

将告诉您哪些用户(通过电子邮件)多次提交了哪些表单(按 ID 和标题)以及总共提交了多少次。

如果您只需要表单的 ID,那么应该这样做:

SELECT value     as email
      ,record
      ,COUNT(*)  as form_count
  FROM subrecords
 WHERE title = 'email'
 GROUP BY value
         ,record
HAVING COUNT(*) > 1
于 2013-09-06T15:52:58.193 回答