Как рассчитывать количество раз, когда идентификатор появляется в столбце другой таблицы - PullRequest
0 голосов
/ 24 января 2020

Заранее извиняюсь: я уверен, что это относительно легко и было задано до тошноты, но я просто не могу придумать правильный поиск.

По сути, я пытаюсь принять список идентификаторов, запрошенных из одной таблицы, а затем посмотрите, какие из них НЕ появляются в отдельном столбце другой таблицы.

Это база данных Wordpress MySQL. Авторы прикрепляются к сообщению с помощью метаданных. И авторы, и посты считаются постами для базы данных. Существует одна таблица, содержащая оба сообщения / авторов: wp_posts / wp. Есть еще одна таблица, содержащая метаданные, прикрепленные к сообщению / автору: wp_postmeta / wm.

Я пытаюсь взять список авторов из wp_posts и посмотреть, какие из них являются сиротами, т.е. не привязан к сообщению, проверив столбец с именем meta_value в wp_postmeta.

Автор привязан к сообщению, указав идентификатор автора из wp_posts в столбце wm.meta_value для Почта. Но сами авторы объявляются наличием значения 'author' в том же столбце. Таким образом, Автор с идентификатором 17078 будет иметь значение 'author' в wm.meta_value, а сообщение, приписанное этому Автору, будет иметь 17078 в wm.meta_value.

. примерно на полпути, вернув всех авторов, которых мы имеем в нашей базе данных:

    SELECT 
        post_title,
        ID
    FROM
        wp_posts wp
    JOIN
        wp_postmeta wm
    ON
        wp.ID = wm.post_id
    WHERE
        wm.meta_value = 'author'

Мне нужно каким-то образом взять этот возвращенный список и выделить, какие из этих идентификаторов не отображаются в столбце wm.meta_value для всех посты. Любые предложения или рекомендации будут с благодарностью.

Ответы [ 3 ]

1 голос
/ 24 января 2020

Попробуйте что-то вроде этого ( просмотр БД Fiddle ):

WITH 
authors AS (
   SELECT post_id
   FROM wp_postmeta wm
   WHERE wm.meta_value = 'author' 
),
posts AS (
   SELECT post_id, (meta_value +0) AS author_id
   FROM wp_postmeta wm
   WHERE wm.meta_value <> 'author' 
)
SELECT post_id
FROM authors
WHERE NOT EXISTS (
     SELECT 1
     FROM posts
     WHERE authors.post_id = posts.author_id 
);
1 голос
/ 24 января 2020

Вам нужно ниже -

SELECT ID
FROM wp_postmeta wm
WHERE wm.meta_value = 'author'
AND NOT EXISTS (SELECT 1
                FROM wp_postmeta wm2
                WHERE wm2.ID = wm.ID)
0 голосов
/ 25 января 2020

Запрос, с которым я в итоге справился, благодаря подсказкам, предоставленным другими ответами, был:

  SELECT 
    wm.post_id
  FROM
    wp_postmeta wm
  WHERE
    wm.meta_value = 'author'
  AND NOT EXISTS (
    SELECT 1
    FROM wp_postmeta wm2
    WHERE wm2.meta_key = '_author'
    AND wm2.meta_value LIKE CONCAT('%"',wm.post_id,'"%')
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...