3

各従業員の請求書データを1日に数回送信する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列を除いてすべてが同じです。

4

3 に答える 3

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構文を使用し、戻ってくるフィールドについて明示的です。)

于 2013-02-06T16:35:20.937 に答える
1
  1. 二重提出を防ぐ方が良いです。
  2. 二重提出を防ぐことはできません...

私はこのようにクエリします:

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情報に簡単にアクセスできます。

于 2013-02-06T16:52:43.690 に答える
0

各行のハッシュを作成して比較するのはどうですか。

`SHA1(concat_ws(field1, field2, field3, ...)) AS jobhash`
于 2013-02-06T16:30:00.623 に答える