MySQL Query - помогите с выбором - PullRequest
4 голосов
/ 09 февраля 2010

Я пытаюсь получить всех пользователей, для которых не задано значение для fid = 13 или нет значения в profile_values. Я предполагаю, что у этого есть простое решение, но я просто не вижу этого. Любая помощь или точка в правильном направлении очень ценится.

(Таблицы users и profile_values ​​оба из Drupal.)

Упрощенные значения:

uid   name  fid     value
1   user1    1       foo
1   user1    2       foo
2   user2    12      
2   user2    13      1265662514
3   user3    NULL    NULL
4   user4    NULL    NULL

Что я пытался:

SELECT u.uid, u.name, pv.fid, pv.value
FROM users u 
LEFT JOIN profile_values pv ON pv.uid = u.uid  
WHERE u.status != 0
AND (pv.fid != 13 OR pv.fid IS NULL) 
GROUP BY u.uid

uid     name      fid     value
1     user1     1       foo
2     user2     12      foo 
3     user3     NULL    NULL
4     user4     NULL    NULL

Моя проблема - user2, которого там быть не должно, так как он имеет значение в fid = 13


Спасибо за все невероятные быстрые и качественные ответы, ура!

Ответы [ 4 ]

1 голос
/ 09 февраля 2010

ГДЕ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ profile_values ​​pv ГДЕ pv.uid = u.uid И pv.fid = 13)

на самом деле это медленное решение, но я не могу понять иначе

1 голос
/ 09 февраля 2010

Вы хотите добавить предложение AND: AND u.uid NOT IN (выберите uid из profile_values, где fid = 13) как bad_uids

0 голосов
/ 09 февраля 2010

Вам нужны только профили, в которых значение НЕ пустое, а fid не равен 13, верно? Таким образом, это означает, что если оба являются истинными ИЛИ, если оба являются истинными, пропустите эти записи. Так что не группируйте их вместе и не используйте OR. Используйте и:

WHERE 
u.status != 0
AND 
pv.fid != 13 
AND
pv.fid IS NOT NULL 

OR

WHERE 
u.status != 0
AND 
pv.fid IS NOT (13 OR NULL)
0 голосов
/ 09 февраля 2010

Может быть попробовать

AND (pv.fid != 13 OR pv.value IS NOT NULL)

Ваши условия немного неясны:

получить всех пользователей, для которых не задано значение для fid = 13 или нет значений в profile_values ​​

Это означает, что «получить всех пользователей с fid, равным чему-то, отличному от 13 И с некоторым значением в profile_values»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...