我已经搜索,但无法找到任何我需要的东西。 我想创建一个存储函数,它将从辅助字段收集数据,并返回逗号分隔的项目列表作为返回字符串。我似乎无法找到任何方式采用可变我在函数创建,并通过记录集迭代和每个结果追加到变量,这样我可以回到它..见下图:MySQL存储函数 - 追加字符串
BEGIN
DECLARE searchCat INT;
DECLARE searchProd INT;
DECLARE metas CHAR;
SET searchCat = cat;
SET searchProd = prod;
SELECT * FROM offer_metas WHERE category = searchCat AND offer_id = searchProd
gatherMeta: LOOP
metas = metas + "," + meta_option;
ITERATE gatherMeta;
END LOOP gatherMeta;
RETURN metas;
END
功能将不会保存,因为我的语法在“metas = metas + meta_option;”。 我在寻找的是将当前字段“meta_option”的当前字段添加到当前变量“metas”的命令,因此我可以在最后返回完整列表。
有什么想法?
更新 - 解
BEGIN
DECLARE metas VARCHAR (300);
SELECT GROUP_CONCAT(CONCAT(mn.title,'=',offer_metas.meta_option) ORDER BY mo.cat_seq ASC) INTO metas
FROM offer_metas
LEFT JOIN meta_options as mo ON mo.id = offer_metas.meta_option
LEFT JOIN meta_names AS mn ON mn.category = mo.category AND mn.seq = mo.cat_seq
WHERE offer_metas.category = searchCat
AND offer_metas.offer_id = searchProd
ORDER BY cat_seq ASC;
RETURN metas;
END
然后,我刚刚更新了我的SQL查询如下(1要约类我在我的PHPand填充进入查询):
SELECT offers.*, s.short_name AS sponsorName, s.logo AS sponsorLogo, getMetas(1,offers.id) AS metas
FROM offers
LEFT JOIN sponsors AS s ON s.id=offers.carrier
GROUP BY offers.id
ORDER BY end_date ASC
默认分离器已经是逗号,但无论如何+1 !!! – RolandoMySQLDBA
无论如何,我结束了使用Group_Concat ..似乎已经在该功能内工作,一切都很好。我的答案已经更新了我的最终查询。 – Silvertiger