1

我正在创建一个图片库,人们可以在其中为每个上传的图片添加评论。

我为所有评论制作了一个数据库表,包括一个外键来匹配图像表。我的 SQL 变量看起来像这样,似乎工作正常:

$all_comments_one_image_sql="
    SELECT userimage.id, image_id, comment, id, comment_date
    FROM userimage, image_comment
    WHERE image_comment.image_id=userimage.id
    ORDER BY comment_id DESC
";

但是,当我为所有画廊图像执行 while 函数时,我将在哪里以及如何将正确的评论回显到每个图像?

4

3 回答 3

1

您应该像这样进行左连接:

select userimage.id, 
       com.image_id, 
       com.comment, 
       com.id, 
       com.comment_date 
             FROM userimage
                LEFT JOIN image_comment as com ON com.image_id=userimage.id
                    WHERE userimage.id = ?
                    ORDER BY com.id DESC
于 2013-02-28T23:01:05.453 回答
0

首先创建一个获取图片评论的函数:

function getImageComments($imageId){
$query = "SELECT userimage.id, image_id, comment, id, comment_date
    FROM userimage
    LEFT JOIN image_comment
    ON image_comment.image_id=userimage.id 
    WHERE image_id = $imageId
    ORDER BY comment_id DESC
";
mysql_query($query);
return mysql_fetch....
}

我还重做您的查询以获得更好的性能。

因此,无论何时加载图像,使用正确的图像 id 调用函数并获取其注释。

于 2013-02-28T23:04:23.613 回答
0

您必须检查正确的 image_id

$all_comments_one_image_sql = "
    SELECT userimage.id, image_id, comment, id, comment_date
    FROM userimage, image_comment
    WHERE image_comment.image_id=userimage.id AND image_id = ?
    ORDER BY comment_id DESC
";

在哪里 ?是你要显示评论的图片的id——如果你使用pdo,你可以只绑定图片id,不用关心转义。

如果您有所有图像的摘要页面,则可以将结果添加到 assoc 数组中,其中键是您的图像 id

$comments[] = array();
while ($row = $res->fetch()) {
    if (empty($comments[$row->image_id])) {
        $comments[$row->image_id] = array();
    }

    $comments[$row->image_id][] = $row;
}

要显示评论,你可以看看,如果 $comments[$image_id] 是一个数组并显示内容

于 2013-02-28T23:00:10.020 回答