1

志愿者演出要求我与 MySQL 数据库搏斗,这是我以前从未做过的,所以请接受我对我的问题可能非常基本的性质表示歉意!我已经阅读了很多关于将查询结果放入变量的类似问题,但其中大多数要么不相关,要么就在我的脑海中。

将参加会议的用户已经回答了一项调查,以提供有关他们何时可用的信息。我需要将此数据复制到计划创建软件使用的完全独立的表中。幸运的是,我设置了调查,以软件的时隙 ID 号的形式存储每个答案。

我有一个查询,开头如下:

INSERT INTO user_time_slots (user_id,day_time_slot_id,available)
SELECT users.id, question.answer, '1'
...

结果是像这样的行

455,17,1
455,29,1
466,13,1

到目前为止,一切都很好。然而!这些是全小时的时间段,例如 12:00 和 15:00,会议在半小时内安排了一些项目。每个半小时时段都有一个全小时时段的 ID 号 + 1。假设 12:00 可用的任何人也可以在 12:30 可用,我希望得到如下所示的结果

455,17,1
455,18,1
455,29,1
455,30,1
466,13,1
466,14,1

我到了@half_hour := question.answer + 1,然后我迷路了;我不知道如何在设置day_time_slot_idquestion.answer设置之间交替@half_hour。这在没有荒谬的扭曲的情况下可行吗?

如果没有,我的备份计划是像上面一样运行一次查询

INSERT INTO user_time_slots (user_id,day_time_slot_id,available)
SELECT users.id, @half_hour := question.answer + 1, '1'
...

但当然我宁愿有一个查询而不是两个。

任何帮助将不胜感激。谢谢!

干杯,玫瑰

4

2 回答 2

1

您需要使用 UNION 来生成多组行:

INSERT INTO user_time_slots (user_id, day_time_slot_id)
SELECT users.id, question.answer, '1'
...
UNION
SELECT users.id, question.answer+1, '1'
...

如果这些WHERE子句很昂贵,另一种方法是使用 JOIN:

INSERT into user_time_slots (user_id, day_time_slot_id)
SELECT users.id, question.answer + increment, '1'
...
JOIN (SELECT 0 increment UNION SELECT 1 increment) x
...
于 2013-06-01T08:00:23.097 回答
1

尝试

INSERT INTO user_time_slots (user_id,day_time_slot_id,available)
SELECT users.id, question.answer, '1'
...
UNION ALL
SELECT users.id, question.answer + 1, '1'
...
于 2013-06-01T08:00:32.850 回答