Синтаксическая ошибка MySQL, но все выглядит правильно - PullRequest
0 голосов
/ 21 января 2012

Это ошибка SQL:

Error: 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 ') and (pi.perm_type='forum' and ( pi.perm_2='*' OR pi.perm_2 LIKE '%,4,%' )) and' at line 2

Это запрос SQL:

SELECT t.tid AS id, t.title, t.last_poster_id AS id2,m.member_group_id, 
m.members_display_name AS statistic,pi.perm_2 FROM topics t  LEFT JOIN members m ON (
m.member_id  = t.last_poster_id )
LEFT JOIN permission_index pi ON ( pi.app='forums' AND pi.perm_type='forum' AND 
pi.perm_type_id=t.forum_id )   WHERE t.forum_id NOT IN() AND (pi.perm_type='forum' AND (
pi.perm_2='*' OR pi.perm_2 LIKE '%,4,%' )) AND t.approved=1 AND (t.moved_to='' OR 
t.moved_to IS NULL ) ORDER BY t.last_post DESC LIMIT 0,11

Теперь этот запрос работает нормально при моей локальной установке MySQL (XAMPP).

Может ли быть, что разные версии MySQL вызовут ошибку SQL в этом запросе?И что именно вызывает ошибку?

  1. Оператор "LIKE"?

  2. Вложенный оператор в предложении where?(Между ())

  3. Что-то еще?

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 21 января 2012

У вас есть пустое NOT IN

Кроме того, вам не нужно одно из условий WHERE для pi, поскольку оно находится в левом соединении.Однако фильтр LIKE в WHERE на внешней таблице pi меняет это на внутреннее объединение.

Итак, вам понадобится это и исправьте свой IN

SELECT 
   t.tid AS id, 
   t.title, 
   t.last_poster_id AS id2,m.member_group_id, 
   m.members_display_name AS statistic,  
   pi.perm_2 
FROM 
   topics t
   LEFT JOIN
   members m ON m.member_id  = t.last_poster_id
   LEFT JOIN 
   permission_index pi ON pi.app='forums' AND pi.perm_type='forum' AND 
                                    pi.perm_type_id=t.forum_id
                             AND 
                          (pi.perm_2='*' OR pi.perm_2 LIKE '%,4,%')
WHERE 
   -- t.forum_id NOT IN() -- error is here
   -- AND 
   t.approved=1 
   AND 
   (
    t.moved_to='' OR t.moved_to IS NULL) 
ORDER BY 
   t.last_post DESC 
LIMIT 0,11

Гораздо проще, когда выобратите внимание на форматирование, а?

3 голосов
/ 21 января 2012
 t.forum_id NOT IN()

В предложении IN нет значений.

1 голос
/ 21 января 2012

Условие "t.forum_id NOT IN ()" недопустимо, поскольку для IN требуется определить хотя бы одно значение.

0 голосов
/ 21 января 2012

Я не знаком с синтаксисом, который вы используете для LIKE. Возможно, его нужно изменить с LIKE "%, 4,%" на LIKE "% 4%". Вы пробовали это?

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