Я искал, но не смог найти что-либо, что делает то, что мне нужно. Я хотел бы создать хранимую функцию, которая будет собирать данные из вторичного поля и возвращать список элементов, разделенных запятыми, в качестве возвращаемой строки. Я не могу найти какой-либо способ сделать переменную я создаю в функции и перебирать в наборе записей и добавления каждого результата в переменную, так что я могу вернуть его .. смотри ниже: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