精确地增加查询结果显示一次

时间:2013-06-01 07:46:26

标签: mysql

志愿者的演出要求我与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,会议在半小时内安排了一些项目。每个半小时的时段都有一个整数小时时段+ 1的ID号。假设12点的任何人都可以在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'
...

但当然我宁愿只有两个查询。

非常感谢任何帮助。谢谢!

干杯, 玫瑰

2 个答案:

答案 0 :(得分: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
...

答案 1 :(得分: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'
...