#mysql #subquery
#mysql #подзапрос
Вопрос:
У меня небольшая проблема с запросом, который я использую в базе данных WordPress. Приведенный ниже запрос возвращает правильные и ожидаемые данные для meta_value
, но моя проблема заключается в том, что я не получаю поле, возвращаемое для оригинала post_id
из подзапроса, поэтому я не могу связать определенное поле meta_value
с оригиналом post_id
— возможно, мне потребуется реструктурировать это, но я немного запутался в том, как вернуть эти данные, связанные с найденным meta_value.
SELECT meta_value
FROM wp_postmeta
WHERE post_id IN (SELECT meta_value FROM wp_postmeta WHERE post_id IN ('1','2','3','4'))
AND meta_key = '_wp_attached_file'
Пример данных
post_id meta_key meta_value
1 _thumbnail_id 2
2 _wp_attached_file image.jpg
Итак, в качестве примера, учитывая список из 1 или более идентификаторов post_id (‘1’), я нахожу meta_value (‘2’) и ищу другую запись с соответствующим post_id (‘2’) и указанным meta_key (‘_wp_attached_file’), и мне нужно вернуть оба мета_значения (‘image.jpeg ‘) и исходный post_id (‘1’)
Заранее спасибо
Ответ №1:
Просто используйте самосоединение:
select wp1.*, wp2.*
from wp_postmeta wp1, wp_postmeta wp2
where wp2.post_id in (1,2,3)
and wp1.meta_value = wp2.post_id and wp2.meta_key = '_wp_attached_file';
Комментарии:
1. Спасибо, это как раз то, что я искал. Мне пришлось немного отредактировать его (wp1.post_id в …. вместо wp2), но он отлично справляется со своей задачей.