2012-04-30 3 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;». То, что я ищу, это команда, чтобы добавить текущую фальсификацию поля «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 

ответ

3

Почему просто не

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

По умолчанию разделитель уже разделенные, но все равно +1 !!! – RolandoMySQLDBA

+0

Я все-таки использовал Group_Concat .. Кажется, что работал в функции, и все хорошо. Мой ответ был обновлен моим окончательным запросом. – Silvertiger