在MYSQL表中查找重复项,其中数据位于“title”中 - > “值”列和其他相关表中的其他数据

时间:2013-09-06 15:37:03

标签: mysql duplicates multiple-tables

鉴于我了解MYSQL的基础知识,我将非常感谢以下方面的帮助:

  

表格 - >子记录架构

     

id |记录|元素|标题|名字|类型|值

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

  

表格 - >记录架构

     

id |提交|形式|标题|名称

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

(感谢@gwc的亲切帮助)

  • 所有电子邮件地址(subrecords.value where subrecords.title =' email')
  • 提交了多个相同表单的
  • (由"字符串" record.title ="表格名称"标识)。
  • subrecords.record = record.id只需加入表格(每个表单提交都是唯一的,并生成一个新的记录。因此无法识别用户和表单)。
  • records.form是外键= forms.id

谢谢

2 个答案:

答案 0 :(得分: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个表单,这将无法满足您的需求。

答案 1 :(得分: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.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