2016-07-04 10 views
0

私のツールでは、ユーザは自分の就業日(例:月曜日から金曜日)を設定できます。設定を保存すると、mysqlユーザテーブルに保存されます。先週から最後にアクティブな日を取得する

次週(今週)、私は彼らの「最後の仕事の日」を迎えます。この場合、それは金曜日になります。どのように私はmysqlを使用しているすべてのユーザーから最後の就業日を得ることができますか?

現在、私はcsv(2,3,4,5,6 - 2 = Monday ...)で作業日を保存していますが、私はそれを変更できます。

私はWEEKDAY()でいくつかのものを試しましたが、うまくいきませんでした。

誰かが私を助けることができますか?

+1

CSVを取り除き、テーブルを正規化してください。あなたの人生ははるかに簡単になります。 –

+0

最初のバージョンは、毎日1つの列になっていました。私は言っていない、CSVの方法は最高です、私はそれを変更することができます、問題はありません。しかし、私のテーブルを変更すると、私の問題は解決しませんでした。最後の勤務日はどのように決定できますか? – user6411365

答えて

0

以下のクエリは、あなたに役立つかもしれません。あなたがこれだけを求めていることを願っています。各ユーザーの最終作業日(friday)を一覧表示します。

SELECT * FROM tablename 
WHERE user_id, workday_id IN 
(SELECT user_id, MAX(workday_id) FROM tablename GROUP BY user_id); 
+0

こんにちはFallAndLearn(ニックニックネームbtw!)。アイデアは正しいが、就業日は火曜日から木曜日までとすることができる。それから私はあなたのクエリを使用することはできません。クエリは「ユーザーxから最後の勤務日を与える」のように見える必要があります。その背後にあるアイデアは、最終勤務日から最初の勤務日にデータを取得することです。 (私に先週行ったことを見せてください) – user6411365

+0

そして最後の就業日のデータはどこに保管していますか? – FallAndLearn

+0

CSVとしてのユーザーテーブルworkdays = '2,3,4' – user6411365

1
DAYNAME(CONCAT('1970-09-2', SUBSTRING_INDEX(workdays, ',', -1))) 

説明:

このMySQLの文字列関数SUBSTRING_INDEX

SUBSTRING_INDEX(workdays, ',', -1) 

...あなたにリストされた最後の稼働日の数を与えます。

DAYNAME(CONCAT('1970-09-2', dayIndex)) 

DAYNAMECONCATを使用してhereから

そしてこのトリック、(何それがないと、コンマがありますすべてのポジションを見つけて、最後のコンマの後にすべてを返し、例えば、SUBSTRING_INDEX('1,2,3', ',', -1)リターン3です) ...あなたにその日の名前を与えます。 (DAYNAMEに日付が必要なので、このテクニックでは、日曜日で0で終わる日付、この場合は1970-09-20を選択し、最後の桁を返されたインデックスで置き換えて、対応する曜日を決定します(例:20 =日曜日、21 =月曜日など)

それらを一緒に入れてください:

SELECT DAYNAME(CONCAT('1970-09-2', SUBSTRING_INDEX(workdays, ',', -1))) AS lastday FROM ... 

を...そして、あなたはlastday変数に返さ平日の対応する名前を取得します。

関連する問題