私は検索しましたが、必要なものを見つけることができませんでした。 私はセカンダリフィールドからデータを収集し、戻り文字列としてコンマ区切りの項目リストを返すストアドファンクションを作成したいと考えています。私は、以下を参照してください..私は機能で作成した変数を取得し、レコードセットを反復処理し、私はそれを返すことができるように、変数にそれぞれの結果を追加する方法を見つけるように見えることはできません。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;"のために保存されません。 私が探しているのは、現行の変数 "metas"に "meta_option"の現在のフィールド値を追加して、最後に完全なリストを返すというコマンドです。
UPDATE - SOLUTION
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