2015-03-26 2 views
1

У меня есть таблица из Wordpress, wp_commentmeta, где я пытаюсь разрешить пользователям напоминать комментарии. Похоже, что этоЕсть ли способ выбрать нормализованные данные, где значение НЕ присутствует

+---------+------------+-----------------------+---------------------+ 
| meta_id | comment_id | meta_key    | meta_value   | 
+---------+------------+-----------------------+---------------------+ 
|  23 |   6 | like     | 2     | 
|  31 |   8 | like     | 1     | 
|  32 |   6 | like     | 1     | 
+---------+------------+-----------------------+---------------------+ 

Я знаю, как получить то, что комментарии любимы пользователя 2

SELECT * FROM `wp_commentmeta` WHERE meta_key="like" AND meta_value=2 

Но я хочу знать; Можно ли построить инструкцию select, чтобы я получал только комментарии, не понравившиеся пользователю 2, чтобы результат выглядел следующим образом?

+---------+------------+----------+------------+ 
| meta_id | comment_id | meta_key | meta_value | 
+---------+------------+----------+------------+ 
|  31 |   8 | like  | -   | 
+---------+------------+----------+------------+ 
+1

SELECT * FROM 'wp_commentmeta' WHERE meta_key = "как" И meta_value <> 2 ИЛИ meta_value IS NULL? –

+0

@sidux. , , Это неверно. Это выберет комментарий 6. –

ответ

1

Да. Вы можете использовать агрегацию и пункт having:

select comment_id 
from wp_commentmeta 
where meta_key = 'like' 
group by comment_id 
having sum(meta_value = 2) = 0; 

sum() в п having подсчитывает количество подобных, где пользователь 2. = 0 говорит, что их нет.

Примечание: Это только те комментарии, которые понравились, но не понравились 2. Если вы также хотите, чтобы комментарии, которые никогда не нравились, вам нужен список комментариев. У вашего вопроса недостаточно информации для этого варианта.

+0

Спасибо! Ваш запрос несколько быстрее, чем альтернатива sidux. Мой план состоял в том, чтобы каждый комментарий понравился владельцу, чтобы сделать его доступным, но если бы я мог дать вам дополнительную информацию, чтобы разрешить запрос получать недоказуемые комментарии, это было бы еще более удивительным. –

+0

@JonRamvi. , , Новые вопросы следует задавать как вопросы, а не как комментарии. –

1

Вы можете сделать это с помощью агрегатов, но, скорее всего, он будет работать медленнее. Это пример с NOT EXISTS

SELECT 
    * 
FROM 
    wp_commentmeta c 
WHERE 
    meta_key = "like" 
    AND NOT EXISTS (SELECT 
         1 
        FROM 
         wp_commentmeta c1 
        WHERE 
         c1.metavalue = 2 
         AND c1.comment_id = c.comment_id 
         AND meta_key = "like")