public_holidaysテーブルにpublic_holidaysを休日テーブルの日付と一致するように挿入する必要があり、clockテーブルのclock_inおよびclock_out時間フィールドと一致し、28800 = 8hrsの時間差を秒単位で取得する必要があります。また、ユーザーテーブルuser_idから指定テーブルを照合する必要があります。非常に混乱したコードでご迷惑をおかけします。ご協力いただきありがとうございました。Mysql複数のwhereおよびjoin操作でクエリを挿入する
時計表
id user_id date clock_in clock_out created_at updated_at
6 12 2016-06-10 2016-06-10 06:00:00 2016-06-10 14:00:00 2016-06-10 19:20:41 2016-06-10 00:15:51
ユーザー
休日
id date holiday_description created_at updated_at
1 2016-06-10 christmas 2016-06-11 15:23:54 2016-06-11 15:23:54
指定
designation_id department_id designation created_at updated_at
1 1 employee 2016-01-30 21:03:24 2016-01-30 22:03:24
科
department_id department_name department_description created_at updated_at
1 IT Info tech 2016-01-30 21:03:24 2016-01-30 21:03:24
は、クロックテーブルから時間8時間を計算することによって、以下の形式でこの表Public_holidaysに挿入する必要があり
user_id department_id designation_id date_cur clock_in clock_out created_at updated_at
12 1 1 2016-06-13 2016-06-10 06:00:00 2016-06-10 14:00:00 2016-06-13 21:03:24 2016-06-13 21:03:24
試み乱雑コード
INSERT INTO public_holidays (user_id, department_id,designation_id,clock_in,clock_out) SELECT(cl.user_id,
di.department_id,
di.designation_id,
cl.clock_in,
cl.clock_out)
FROM clock cl, designations di
where
(
select h1.date AS ph_date from holidays h1 WHERE ph_date = 2015-01-22
AND
select (TIMESTAMPDIFF(second,cl.clock_in, cl.clock_out)=28800) AS differ1
AND
INNER JOIN users AS ui ON ui.designation_id = di.id
);
@shudder動作します。..あなたは必要なテーブルから最初に始めて、これらのテーブルの関係を定義してから、条件を最後に選択する列を選択します。 – scaisEdge
MySQLはサブクエリを嫌います。そして、あなたが列に参加している場合は、列にインデックスが必要です。 – RJJ
あなたが 'SELECT'の権利を得るまで、' INSERT'を忘れてしまいます。いくつかのdbマネージャ(phpMyAdminさえ)のクエリをテストして、正しい結果セットを得る(繰り返し行なし)。 select statemetntで使用されるすべてのテーブルは何らかの形で関係していなければなりません。その関係でJOINされ、WHERE句または関係自体のフィールドの結果をフィルタリングするために直接使用されます。 ( 'IN()'句の中でサブクエリを使うことは可能ですが、混乱を招くことになります)。 'hollidays'テーブルはクエリとは関係ありません。構文も間違っています - 両方の 'users'は選択されたテーブルに結合されなければならず、それらも関連しません。 RTFM。 – shudder