Member 13818387 Ответов: 1

Цикл для копирования данных из многих полей в одно


Привет
Я прошу помощи в передаче данных.

Я хотел бы скопировать все ссылки, которые хранятся в закрытых полях, в содержимое поста и поместить их после содержимого поста.

Проблема в том, что посты имеют разное количество полей со ссылками. Несколько или несколько.

Таблицы выглядят так (основные столбцы)

table posts
ID	POST_CONTENT
1	example one.
2	ipsum.
3	something else.

Второе-это
table postmeta
meta_id	post_id	meta_key	meta_value
420	1	wpcf-obrazek	image http://url_1.pl/
440	1	wpcf-obrazek	image http://url_2.pl/
601	2	wpcf-obrazek	image http://url_3.pl/
710	2	wpcf-obrazek	image http://url_4.pl/
210	3	wpcf-obrazek	image http://url_5.pl/
555	3	wpcf-obrazek	image http://url_6.pl/
648	3	wpcf-obrazek	image http://url_7.pl/
700	3	wpcf-obrazek	image http://url_8.pl/
<pre>
Links are only when the meta_key=wpcf-obrazek
I would like to get:

<pre>
table posts
ID	POST_CONTENT
1	example one.CHAR(10)http://url_1.pl/CHAR(10)http://url_2.pl/
2	ipsum.CHAR(10)http://url_3.pl/CHAR(10)http://url_4.pl/
3	something else.CHAR(10)http://url_5.pl/CHAR(10)http://url_6.pl/CHAR(10)http://url_7.pl/CHAR(10)http://url_8.com/


Можно ли это сделать с помощью петли или другим простым способом?

Что я уже пробовал:

Я использовал простой:
Набор постов.управление недвижимостью = postmeta.meta_value
Где meta_key = ....
И postmeta.post_id = POSTS.ID

но это работает только тогда, когда neta_key появляется один раз в посте

1 Ответов

Рейтинг:
2

CHill60

Вы абсолютно не должны использовать петлю. MySQL основан на группах, как и большинство систем управления базами данных.

То, что вы пытаетесь сделать, - это объединить значения из postmeta таблица на основе post_id

Если вы посмотрите на простой запрос

select A.ID, A.POST_CONTENT, B.meta_value
FROM @posts A
INNER JOIN @postmeta B ON A.ID=B.post_id
вы можете получить значения
1	example one.	image http://url_1.pl/
1	example one.	image http://url_2.pl/
2	ipsum.	image http://url_3.pl/
2	ipsum.	image http://url_4.pl/
3	something else.	image http://url_5.pl/
3	something else.	image http://url_6.pl/
3	something else.	image http://url_7.pl/
3	something else.	image http://url_8.pl/
Затем вы можете использовать Функция MySQL GROUP_CONCAT[^] чтобы создать "список" из meta_valueс
Что, как мне кажется, будет выглядеть примерно так (непроверено)
SELECT A.ID, A.POST_CONTENT, 
    GROUP_CONCAT(B.meta_value ORDER BY B.meta_id SEPARATOR ' ')
    FROM @posts A
    INNER JOIN @postmeta B ON A.ID=B.post_id
Я понятия не имею, откуда вы получаете бит char(10), но этого должно быть достаточно, чтобы вы начали


Member 13818387

У меня почти есть то, что мне нужно, спасибо.
Пожалуйста, помогите мне изменить Select в обновлении
Этот запрос возвращает нужные мне значения.

SELECT CONCAT( P.POST_CONTENT, GROUP_CONCAT(M.meta_value ORDER BY M.meta_id SEPARATOR 'CHAR(10)'))
    FROM posts P
    INNER JOIN postmeta M ON P.ID=M.post_id
    WHERE M.meta_key = 'wpcf-obrazek'
    GROUP BY P.ID

Но как сделать обновление из этого?
Я написал:
UPDATE P, M
SET P.post_excerpt = CONCAT( P.POST_CONTENT, GROUP_CONCAT(M.meta_value ORDER BY M.meta_id SEPARATOR 'CHAR(10)'))
    FROM posts P
    INNER JOIN postmeta M ON P.ID=M.post_id
    WHERE M.meta_key = 'wpcf-obrazek'
    GROUP BY P.ID
\
но у меня есть ошибка

CHill60

В данный момент я не могу получить доступ к Oracle, но в чем ошибка? Я думаю, что это могут быть одинарные кавычки вокруг 'CHAR(10)' и имея оба псевдонима в UPDATE ... пробовать

UPDATE P
SET P.post_excerpt = CONCAT( P.POST_CONTENT, GROUP_CONCAT(M.meta_value ORDER BY M.meta_id SEPARATOR CHAR(10)))

Member 13818387

Select не работает, когда я удалил кавычки на CHAR(10)

Когда я запускаю свой оператор обновления, у меня есть

#1064 - Something is wrong in your syntax obok 'FROM posts P
    INNER JOIN postmeta M ON P.ID=M.post_id
    WHERE M.meta_key ' w linii 3

Без кавычек на CHARR(10) ошибка есть:
#1064 - Something is wrong in your syntax obok 'CHAR(10)))
    FROM posts P
    INNER JOIN postmeta M ON P.ID=M.post_id
    W' w linii 2

CHill60

Там есть дополнительный конкат, проверьте синтаксис в документации. Я разговариваю по телефону так что мне трудно видеть