2013-06-12 166 views
-4

什么与此查询?:SQL语法查询错误

SELECT 
    'posts'.'post_id' AS 'id', 
    'posts'.'post_title' AS 'title', 
    LEFT('posts','post_body', 512) AS 'preview', 
    'posts'.'post_user' AS 'user', 
    DATE_FORMAT('posts'.'post_date', '%d/%m/%Y %H:%i:%s') AS 'DATE', 
    'comments'.'total_comments', 
    DATE_FORMAT('comments'.'last_comment', '%d/%m/%Y %H:%i:%s') AS 'last_comment' 
    FROM 'posts' 
    LEFT JOIN (
     SELECT 
     'post_id', 
     COUNT('comment_id') AS 'total_comments', 
     MAX('comment_date') AS 'last_comment' 
     FROM 'comments' 
     GROUP BY 'post_id' 
    ) AS 'comments' 
    ON 'posts'.'post_id' = 'comments'.'post_id' 
    ORDER BY 'posts'.'post_date' DESC 

的问题,我得到:

#1064 - 你在你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'。'post_id'AS'id','posts','post_title'AS'标题',LEFT('posts','p'at line 2

+3

既然你正在使用MySQL使用反引号而不是单引号围绕表,列和别名。 – Taryn

+0

这是一个所谓的PICNIC错误。 –

回答

1

不要使用正常的撇号(“'”),但在MYSQL中反引号“`”。正常的撇号用于引用字符串。还请注意,我更改了逗号

LEFT(`posts`,`post_body`, 512) as `preview` 

到一段时间。

它应该阅读:

SELECT 
     `posts`.`post_id` AS `id`, 
     `posts`.`post_title` AS `title`, 
     LEFT(`posts`.`post_body`, 512) AS `preview`, 
     `posts`.`post_user` AS `user`, 
     DATE_FORMAT(`posts`.`post_date`, '%d/%m/%Y %H:%i:%s') AS `DATE`, 
     `comments`.`total_comments`, 
     DATE_FORMAT(`comments`.`last_comment`, '%d/%m/%Y %H:%i:%s') AS `last_comment` 
     FROM `posts` 
     LEFT JOIN (
      SELECT 
       `post_id`, 
       COUNT(`comment_id`) AS `total_comments`, 
       MAX(`comment_date`) AS `last_comment` 
       FROM `comments` 
       GROUP BY `post_id` 
       ) AS `comments` 
     ON `posts`.`post_id` = `comments`.`post_id` 
     ORDER BY `posts`.`post_date` DESC 
+0

谢谢,但我得到了#1054 - '字段列表'中的未知列'posts.post_id' – ddacot

+0

那么,表中是否有'post_id'列? –

4

您使用字符串文字作为表:

FROM 'posts' 

如果您想逃跑的表名,使用反引号,如:

FROM `posts` 

逸出表名不是必需的; from posts是完全正常的。

1

我认为,你的左边的语法错误时,第一个逗号改为一段

LEFT('posts','post_body', 512) AS 'preview', 

应该

LEFT('posts'.'post_body', 512) AS 'preview',