我们有一个iPhone应用程序,每天都会多次向我们的员工发送发票数据。当它们处于低单元信号区域时,票证可以作为重复进入,但是它们在mysql数据库中被分配了唯一的“作业ID”,因此它们被视为唯一的。我可以排除作业ID并创建剩余的列DISTINCT,它为我提供了我正在寻找的过滤行(因为字面上每个数据点除了作业ID之外都是相同的),但是我需要作业ID,因为它是每张发票的主要参考点,是我指出的:批准,编辑等。
所以我的问题是,如何在我的查询中过滤掉“附近”的重复行,同时仍然为每张票提取作业ID?
当前查询如下:
SELECT * FROM jobs, users
WHERE jobs.job_csuper = users.user_id
AND users.user_email = '".$login."'
AND jobs.job_approverid1 = '0'
感谢您对此进行调查!
编辑(提供的示例): 这就是我所说的'近似重复'
Job_ID - Job_title - Job_user - Job_time - Job_date
2345 - Worked on circuits - John Smith - 1.50 - 2013-01-01
2344 - Worked on circuits - John Smith - 1.50 - 2013-01-01
2343 - Worked on circuits - John Smith - 1.50 - 2013-01-01
所以除了Job_ID列之外,一切都是相同的。
答案 0 :(得分:1)
您需要group by
:
SELECT *
FROM jobs, users
WHERE jobs.job_csuper = users.user_id
AND users.user_email = '".$login."'
AND jobs.job_approverid1 = '0'
group by <all fields from jobs except jobid>
我认为最终的查询应该是这样的:
select min(Job_ID) as JobId, Job_title, user.name as Job_user, Job_time, Job_date
FROM jobs join users
on jobs.job_csuper = users.user_id
WHERE jusers.user_email = '".$login."' AND jobs.job_approverid1 = '0'
group by Job_title, user.name, Job_time, Job_date
(这使用ANSI语法进行连接,并明确说明要返回的字段。)
答案 1 :(得分:1)
我会这样查询:
select
min(Job_ID) as real_job_id
,count(Job_ID) as num_dup_job_ids
,group_concat(Job_ID) as all_dup_job_ids
,j.Job_title, j.Job_user, j.Job_time, j.Job_date
from
jobs j
inner join users u on u.user_id = j.job_csuper
where
whatever_else
group by
j.Job_title, j.Job_user, j.Job_time, j.Job_date
这包括超出您明确要求的内容。但是,提醒您有多少重复可能会很好,并且可以在您需要时轻松访问重复的ID信息。
答案 2 :(得分:0)
如何为每一行创建哈希并比较它们:
`SHA1(concat_ws(field1, field2, field3, ...)) AS jobhash`