2015-07-03 4 views
0

Да, здесь немного путают. У меня есть количество таблиц в одной из моих установок wordpress, а их имя и имена полей в значительной степени описательны. Поэтому я не думаю, что вам нужно объяснение. Моя проблема здесь на самом деле с четвертым внутренним соединением, которое я пытаюсь сделать. Запрос прост:MYSQL - Внутренняя ошибка синтаксиса связи

SELECT * 
FROM wp_posts AS post 
    INNER JOIN wp_postmeta AS postmeta ON post.ID = postmeta.post_id 
    INNER JOIN wp_game AS game ON post.ID = game.post_id 
    INNER JOIN wp_game_platform AS platform ON game.game_id = platform.GameId 
    INNER JOIN wp_platform_release AS release ON release.PlatformID = platform.ID 
WHERE post.post_type = 'games' AND postmeta.meta_key = 'post_views_count' AND platform.Status = 0 AND release.ReleaseDate > 1435917562 
ORDER BY postmeta.meta_value DESC, game.game_id 
LIMIT 100 

Это, как предполагается, чтобы получить список всех игровых платформ (Xbox версии, ПК версии игры), которые еще не освобождены и сортировать их с страницы посещений. Поскольку вы можете видеть, что посещения страниц хранятся в виде сообщений, поэтому я сделал соединение на wp_postmeta. Этот запрос дает мне эту ошибку синтаксиса:

failed : 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 'release ON release.PlatformID = platform.ID WHERE post.post_type = 'games' AND ' at line 1

Который четко указано, что есть ошибка синтаксиса в запросе, что я не могу видеть. Забавно достаточно, если я запускаю следующий запрос, он возвращает ожидаемые результаты (все игры [выпущенные или нет], отсортированных по их сообщению посещений):

SELECT * 
FROM wp_posts AS post 
    INNER JOIN wp_postmeta AS postmeta ON post.ID = postmeta.post_id 
    INNER JOIN wp_game AS game ON post.ID = game.post_id 
    INNER JOIN wp_game_platform AS platform ON game.game_id = platform.GameId 
WHERE post.post_type = 'games' AND postmeta.meta_key = 'post_views_count' AND platform.Status = 0 
ORDER BY postmeta.meta_value DESC, game.game_id 
LIMIT 100 

Сначала я подумал, что есть РЕГИСТРИРУЙТЕСЬ предел, но после исследования Я узнал, что предел составляет более 60 таблиц, далеких от 5. Итак, вы видите что-то, чего я не могу?

Благодаря

ответ

2

релиз является зарезервированным словом - попробуйте изменить имя псевдонима к чему-то еще. См.: https://dev.mysql.com/doc/refman/5.0/en/keywords.html

+0

Это было первое, что приходит мне на ум, но даже вставив его в [], я дал ту же ошибку. Я полностью изменю имя и повторю попытку. tnx –

+0

да, меняя имя псевдонима, решила мою проблему. Я был уверен, что размещение зарезервированных слов в [] приведет к их использованию, но кажется, что либо я ошибаюсь, либо речь идет о другом процессоре tsql, таком как Microsoft SQL. –

+1

Использование backquotes будет работать для MySQL. Я предпочитаю избегать зарезервированного слова - просто чтобы не смотреть на кажущийся правильный SQL, когда MySQL дает не очень конкретное сообщение об ошибке, как вы. – PaulF