0

検索しましたが、必要なものを見つけることができませんでした。セカンダリ フィールドからデータを収集し、カンマ区切りの項目リストを戻り文字列として返すストアド関数を作成したいと考えています。関数で作成した変数を取得し、レコードセットを反復処理し、各結果を変数に追加して返すことができるようにする方法を見つけることができないようです..以下を参照してください:

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 は、PHP にあるオファー カテゴリで、クエリに入力します)。

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
4

2 に答える 2

3

なぜだけではないのですか

SELECT GROUP_CONCAT(meta_option SEPARATOR ',')
FROM offer_metas
WHERE category = searchCat AND offer_id = searchProd;
于 2012-04-30T18:00:27.170 に答える
0

オプション 1) Group_Concatを使用する

オプション 2) || を使用 +の代わりに

オプション 3) Concat() を使用する

于 2012-04-30T18:00:58.713 に答える