2013-06-03 4 views
3

Я не знакомы с mysql, поэтому не совсем точно, как правильно выполнить выборку запроса. Я работаю с WordPress и проиллюстрировать то, что я хотел бы, чтобы выбрать см картинку ниже:mysql комбинированный запрос, идентификаторы из списка, разделенного запятой

scetch of mysqlquery

У меня есть идентификатор одного специального поста. Я хотел бы получить все другие сообщения, которые подключены к нему следующим образом:

В таблице posts_meta могут присутствовать записи, post_id соответствует данным ID. Одна из этих записей meta_key имеет определенное значение, а meta_value этой самой записи представляет собой список, разделенный запятой post_id. Я хотел бы выбрать * для каждого из сообщений которого ID находится в том, что список разделенных запятыми

Я начал со следующим:

SELECT * 
FROM prefix_posts AS a 
JOIN prefix_postmeta AS b ON (a.ID = b.post_id) 
WHERE … //?? 

, но я понятия не имею, как закончить запрос. Как я могу выбрать идентификаторы, чтобы поочередно выбирать сообщения? Я нашел ответы SO, касающиеся FIND_IN_SET, но я не хочу проверять, установлен ли данный идентификатор в наборе, мне больше нужно что-то вроде «STR_SPLIT» в подзапросе.

ответ

1

Я хотел бы выбрать * для каждого из сообщений, чьи ID заключается в том, разделенный запятыми список

Почему не используется метод FIND_IN_SET?, Он может помочь вам для вашей проблемы Этот запрос возвращает все сообщения у которых есть id в поле meta_value из мета-строки, имеющего ваш «специальный почтовый идентификатор» как post_id.

SELECT * FROM Post a, meta b 
WHERE FIND_IN_SET(a.id, b.linked)>0 AND b.post_id= $id_post; 

Пробовал на SQLFiddle, кажется, что работает. Добавьте предложение GROUP BY, если вы хотите избежать дубликатов.

+0

Спасибо! Этот запрос делает то, что я хочу: SELECT * FROM prefix_posts AS в INNER JOIN prefix_postmeta AS б WHERE b.meta_key = "my_desired_meta_key" И FIND_IN_SET (a.ID, b.meta_value)> 0 И b.post_id = " желаемый идентификатор " – philipp