Я запрашиваю базу данных mysql, wordpress, ища сайты, использующие специальный плагин для веб-reidrects. Я не знаю, в каких таблицах живут ссылки, а таблицы отформатированы в следующем формате: wp _ %% _ postmeta, значение %% не всегда последовательное, а не каждая таблица содержит значение, которое я запрашиваю.
Я разработал запрос для поиска
Этот запрос работает, чтобы вернуть значения, которые я хочу, но я не могу привязать результаты этих данных к каждой соответствующей таблице строк. Я не могу понять, как получить
SET GROUP_CONCAT_MAX_LEN = 50000;
SELECT
CONCAT('select * from (select post_id, meta_value from ',
GROUP_CONCAT(tb
SEPARATOR ' where meta_key like "_gdd_speedy_page_redirect" union select post_id, meta_value from '),
' where meta_key like "_gdd_speedy_page_redirect") as Wdp_tables ')
INTO @wdp_table_query FROM
(SELECT
CONCAT(table_schema, '.', table_name) tb
FROM
information_schema.tables
WHERE
table_name LIKE '%_postmeta') A;
SELECT @wdp_table_query;
prepare stmt from @wdp_table_query;
execute stmt;
deallocate prepare stmt;
Возвращаемые данные выглядят следующим образом:
POST_ID | META_VALUE
29 | URL_HERE
493 | NEXT_URL_HERE
Мне нужно, чтобы данные возвращались так:
TABLE | POST_ID | META_VALUE
wp_03_postmeta | 2 | URL_HERE
wp_74_postmeta | 493 | NEXT_URL_HERE
Есть ли способ, которым я могу вставить соответствующую таблицу, запрашиваемую в выбранном статусе?
Если вы полностью переместите select post_id, meta_value from
в group_concat, вы сможете просто вставить имя таблицы в список выбора; что-то вроде этого:
GROUP_CONCAT(CONCAT('select "', A.tb, '" AS theTable, post_id, meta_value from'...
Я не слишком внимательно смотрел на ваш точный, нужный запрос, но в этих случаях СЕПАРАТОР часто может быть просто ' UNION '
.
Общий формат
CONCAT([wrapper_start]
, GROUP_CONCAT([table_query... built from a CONCAT] SEPARATOR ' UNION ')
, [wrapper_end]) AS query
Создание information_schema.tables
в подзапросе кажется более сложным.