2013-10-15 2 views
0

Я написал запрос с IF() заявление в WHERE пункте:IF в WHERE

SELECT DISTINCT a.*, u.user_email, u.user_nicename, u.user_login, u.display_name 
    (
     SELECT b.date_recorded 
     FROM wp_bp_activity as b 
     WHERE b.type IN ('activity_comment','activity_update') 
      AND IF(b.type = 'activity_comment', b.item_id, a.id) = a.id 
     ORDER BY b.item_id desc 
     limit 0,1 
    ) as drecord 
FROM wp_bp_activity as a 
LEFT JOIN wp_users as u ON a.user_id = u.ID 
WHERE 
    a.type IN ('activity_update') 
order by cast(drecord as datetime) desc 
limit 0,20 

Но это дает ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT b.date_recorded FROM wp_bp_activity as b WHERE b.' at line 3 

Что такое правильный способ использования IF, как это?

+0

вы пропустите запятую после u.display_name ... в первой строке. –

+0

Не могли бы вы описать, что должно сделать это утверждение 'if'? Поскольку похоже, что он может быть заменен простым утверждением на основе логических операторов. – guessimtoolate

+0

@guessimtoolate, с каким утверждением вы имеете в виду? – revo

ответ

1

Первое, что необходимо изменить, это добавить запятую после u.display_name. Это должно помочь.

1

Вы пропускаете запятую после u.display_name ... запрос будет

SELECT DISTINCT a.*, u.user_email, u.user_nicename, u.user_login, u.display_name, 
(
    SELECT b.date_recorded 
    FROM wp_bp_activity as b 
    WHERE b.type IN ('activity_comment','activity_update') 
     AND IF(b.type = 'activity_comment', b.item_id, a.id) = a.id 
    ORDER BY b.item_id desc 
    limit 0,1 
) as drecord 
FROM wp_bp_activity as a 
LEFT JOIN wp_users as u ON a.user_id = u.ID 
WHERE 
    a.type IN ('activity_update') 
    order by cast(drecord as datetime) desc 
limit 0,20 

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

1

Вам даже нужно, если?

((b.type = 'activity_comment' AND b.item_id = a.id) OR (b.type <> 'activity_comment')) 

, кажется, что вы пытаетесь сделать

Ошибка SQL, как говорили другие, хотя это не хватает запятой