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