在MYSQL表中查找重复项,其中数据位于;标题「-&燃气轮机&引用;“价值”;其他相关表中的列和其他数据

在MYSQL表中查找重复项,其中数据位于;标题「-&燃气轮机&引用;“价值”;其他相关表中的列和其他数据,mysql,duplicates,multiple-tables,Mysql,Duplicates,Multiple Tables,鉴于我了解MYSQL的基本知识,我将非常感谢以下方面的帮助: 表->子记录模式 id |记录|元素|标题|名称|类型|值 该表存储通过web表单提交的数据。 每行是一个字段 “记录”是标识每个唯一提交表单的字段,表单标题存储在另一个表中: 表->记录模式 id |提交|表格|标题|姓名 我需要找到多次提交相同表单的所有用户(通过电子邮件): (感谢@gwc的善意帮助) 所有电子邮件地址(subrecords.value,其中subrecords.title='email') 提交了多个相同表单

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

表->子记录模式 id |记录|元素|标题|名称|类型|值 该表存储通过web表单提交的数据。 每行是一个字段 “记录”是标识每个唯一提交表单的字段,表单标题存储在另一个表中:

表->记录模式 id |提交|表格|标题|姓名 我需要找到多次提交相同表单的所有用户(通过电子邮件):

(感谢@gwc的善意帮助)

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

谢谢

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

但是试试看

编辑:

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张表格,这将无法满足您的要求。

更新了其他要求

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

电子邮件分组(不幸的是,该邮件不在您的列中),然后
将(*)计算为提交
。用
HAVING submits>1
将其包装起来。(哦,
其中title='email'按值分组可能有效)。您如何知道给定字段(子记录表行)与哪个表单(记录表行)相关?也许回答了我自己的问题。是subrecords.record=records.id吗?@gwc我假设record->record。id@gwc是的,subrecords.record=record.id请记住
中的title='email'
。如果
title='dogsname'
不这样做就会弄脏水。请参阅我的编辑。我不确定子记录中的外键是什么,只需相应地更改即可。@CrckrJack#1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解第2行的子记录sr JOIN records r中的“*)附近使用的正确语法,尝试删除别名,或者查看@gwc的答案。他的看起来更好:)@CrckrJack gwc first查询返回空结果,这是不可能的,因为它应该查找所有重复的电子邮件,并且大约95%的用户提交了多封电子邮件,我还尝试了您的查询删除别名并使用完整的表名,第2行仍然存在语法错误只是为了进一步澄清,我需要筛选一个特定的表单名称,并查找多次提交此表单的所有用户(重复电子邮件)。您的第一次查询返回空结果(有些不正确,因为这是不可能的)第二个查询忽略了这一点,因为它需要连接到记录表,以便按表单进行筛选。这两个查询都没有返回任何结果,我感谢您的努力,但是出现了一些问题。有什么建议请告诉我。那么,让我们具体了解一下“表单名称”的意思是record.title或record.form或record.name还是其他什么?我将采用record.name。因此,如果我理解正确,您希望知道所有具有多个子记录的电子邮件地址(subrecords.value where subrecords.title='email')。对于指定(由您假设)的record.name,record=record.id?此外,如果您可以提供示例数据和/或设置SQLFIDLE()我假设记录表表示一个表单(如模板中的表单),提交相同表单的所有用户都将引用该表单。现在,我开始怀疑记录表中是否有许多行在“form”列中具有相同的值。而record.form实际上是定义要填写的实际表单的另一个表的外键。这条路对吗?如果是这样的话,那么肯定是改变了答案。