2012-04-30 20 views
0

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

答えて

3

だけでなく

SELECT GROUP_CONCAT(meta_option SEPARATOR ',') 
FROM offer_metas 
WHERE category = searchCat AND offer_id = searchProd; 
+0

デフォルトセパレータは既にカンマで、とにかく+1()連結方式を使用! – RolandoMySQLDBA

+0

とにかくGroup_Concatを使ってしまった。関数内で働いているようだし、すべてうまくいく。私の最終的な質問で私の答えが更新されました。 – Silvertiger

関連する問題