-4

このクエリの問題は何ですか?:

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 構文にエラーがあります。'.'post_id' AS 'id', 'posts'.'post_title' AS 'title', LEFT('posts','p' at line 2

4

3 に答える 3

4

文字列リテラルをテーブルとして使用しています:

FROM 'posts'

テーブル名をエスケープしたい場合は、次のようにバッククォートを使用します。

FROM `posts`

テーブル名をエスケープする必要はありません。from posts完全に問題ありません。

于 2013-06-12T14:19:28.940 に答える
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
于 2013-06-12T14:20:04.700 に答える