2012-10-30 145 views
5

我想存储SELECT statment到多个变量的结果。SELECT INTO多@variables MySQL的

我知道,这个查询的结果总是从6点不同的行返回6 ints

我曾尝试使用下面的代码尝试:

SELECT id INTO @photo1, @photo2, @photo3, @photo4, @photo5, @photo6 
FROM album WHERE uploaded = @time AND scene_id = NEW.id; 

album是一个表。 uploadedalbum中的字段。 scene_idalbum中的字段。 idalbumPRIMARY_KEY

我已阅读,变量的数量必须等于字段的数目。上述说法显然并非如此。

考虑到这一点,我将如何解决这个问题?

此代码被一个MySQL触发器内使用。

编辑:相关表格的架构为每个请求:

person -- name of table 
id | approved -- id is PK 

album -- name of table 
id | uploaded | scene_id -- id is PK 

触发器是在从0 approved变化被炒到1

+0

你必须发布你正在使用哪种语言来驱动这个数据库。如果我清楚你想要什么,你不能在一个选择中做到这一点。 – climbage

+0

我正在建立这个MySQL触发器。谢谢 –

+0

我敢问你为什么想要变量中的数据?如果您需要对稍后插入/删除的数据执行任何操作,那么为什么不直接从'OLD' /'NEW'表中选择呢? – Bridge

回答

8

您可以用相同的表连接,并保证每个加盟将提供新的ID,类似的信息(例如,用于两个ID,但你会得到点。):

SELECT a1.id, a2.id INTO @photo1, @photo2 
FROM album a1 
inner join album a2 on a2.scene=a1.scene and a2.upload=a1.upload and a2.id>a1.id 
WHERE a1.uploaded = @time AND a1.scene_id = NEW.id; 

一个完整的SQL和测试用例见SqlFiddle

+0

谢谢。但是我得到错误#1415 - 不允许从触发器返回结果集。 'select @ photo1,@ photo2,@ photo3,@ photo4,@ photo5,@ photo6;'导致错误。有任何想法吗? –

+0

@Ríomhaire那是别的,你需要提供你的触发器代码体。 – dan

+0

我也遇到这个错误; #1235 - 此版本的MySQL尚不支持'具有相同动作时间和一个表的事件的多个触发器'。 –