2011-06-27 1 views
1

私は、アートワークファイルを承認するために使用するシステムに新しい機能を追加しています。 1つの表には、ジョブバージョンの関連するすべての詳細がリストされています。別の表には、そのバージョンを承認する必要があるすべてのユーザーがリストされています。新しいバージョンが追加されると、ユーザーのリストが選択され、そのユーザーはすべて、そのジョブを承認して承認するように電子メールで通知されます。グループのすべてのメンバーを1人のメンバーがアクションを実行したときのステータスに設定するMySQLのクエリ

新しい機能は、複数のユーザーが特定のユーザーグループに属している可能性があるため、実際には1人のユーザーのみが承認する必要があるということです。

グループから1人のユーザーが承認した場合、そのジョブを承認してステータスを更新する必要がある他のすべてのユーザーを引き出し、承認したと言います。

承認者テーブルには、そのジョブの複数のユーザーの一覧が表示されます。そのリストから、現在ログインしているグループと同じグループに属し、承認を得ているすべてのユーザーを選択する必要があります。

開始点として、セッションにログインしているユーザーのグループを追加しましたので、まず何かがあります。

私はこの仕事に必要なユーザーのリストを引き出すことができます。次に、そのグループをユーザーテーブルと照合して、別のグループにあるものを削除するか、承認を求めることはありませんでした。

サブセレクトしようとしていたが、あきらめていた。

このグループに属し、このジョブを承認する必要があるユーザーだけに結果をフィルタリングするための合理的に簡単な方法についての説明はありますか?

私が試してみた:

SELECT * 
FROM approvals 
RIGHT JOIN job_versions ON approvals.job_version_id = job_versions.ID 
WHERE approvals.jobnumber = '5' 
AND approvals.job_version_ID = '42' 
AND approvals.groups LIKE '%legal%' 
AND approvals.approved ='N' 
をそれはまた、「法的」に含まれていない他のユーザーに引っ張っています。

+1

を更新を行う必要があり、ユーザーテーブルがあり、または承認テーブル内のユーザーですか? – TabbyCool

+0

データベースを更新し、そこから情報を取得しないように思えますか? – joakimdahlstrom

+1

もう一つの考え方では、 'LIKE '%legal%'は' legal 'の文字を含むもの、例えば' illegal 'のようなものを受け入れます。 – joakimdahlstrom

答えて

0

私の知る限り見るように、あなたは承認テーブルに

UPDATE approvals set approved='Y' where approvals.jobnumber = '5' AND approvals.job_version_ID = '42' AND approvals.groups LIKE '%legal%' AND approvals.approved ='N' 
+0

ええ、究極的には、私は承認を更新したいと思っていますが、逆に進んで各レコードをステップアップして更新する前に正しいデータを取得していることを確認しました。そして、ユーザーテーブルがあります。ユーザー –

+0

次に、「更新」によって更新されるすべてのデータを、承認から選択*することによって選択できます。ここで、approvals.jobnumber = '5' AND approvals.job_version_ID = '42' AND approvals.groups LIKE '%legal%' AND承認済み= 'N' – Greenisha