1

私が作成したユーザー生成のphpギャラリーにコメントを追加するのに本当に苦労しています。画像用のデータベース テーブルがあります: userimage (id、imagepath、userid、description) とテーブル image_comment と外部キー列 (comment_id、comment、auther、image_id、comment_date)。私のアプローチは、SQLクエリを使用して関数を作成し、それをギャラリーのwhileループで呼び出すことでした-ループ内の一致する画像への正しいコメントを抽出することを望んでいます。
関数:

function getImageComments($imageId){
$query = "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";
mysql_query($query);}

While ループでの変数と関数呼び出し:

while($gallery_data=mysql_fetch_assoc($gallery_result))
{
$gallery_out .= "<div class=\"pic-container\"><img src=\"".$gallery_data['path']."\">";

$imageId = $gallery_data['id'];
$gallery_out .= getImageComments($imageId);

これは私にとってはまったく何の役にも立たず、私は単にここに在庫があり、続行する方法を確認するファンタジーはありません..

4

2 に答える 2

1
function getImageComments($imageId){
   $query = "SELECT userimage.id, image_id, comment, id, comment_date
   FROM userimage, image_comment
   WHERE image_comment.image_id=userimage.id
   AND userimage.id='$imageId';
   ORDER BY comment_id DESC";
   $result=mysql_query($query);
   //do something with this query result, since you are doing $gallery_out .= getImageComments($imageId);
   $return_value="";
   while($row=mysql_fetch_array($result)){
       $return_value.="<div>$row[2]</div>";
   }  
   return $return_value;
}

また、新しいコードを開発している場合は、mysqli_ 関数または PDO の使用を検討してください。

于 2013-03-01T10:41:03.123 に答える
0

コードはあなたのものとはかなり異なりますが。投稿ごとに 1 + 1 ではなく、合計 2 つのクエリのみを使用して、ギャラリーと同様のことを行います。

$user->GetPosts(); の一部 (私はクエリを省略しました)

$posts = []; 
$post_IDs = [];
while($row = $result->fetch_assoc())
{
    if(!in_array($row['object_ID'], $post_IDs))
        $post_IDs[] = $row['object_ID'];

    $posts[] = new Post($row, $_SESSION['uid']);
}

if(count($post_IDs) == 0)
    return $posts;

$result = $this->getComments($post_IDs);

while($row = $result->fetch_assoc())
{
    $comment = new Comment($row, $_SESSION['uid']);
    foreach($posts as $post)
        if($post->object_ID == $comment->object_commented_ID)
            $post->comments[] = $comment;
}

return $posts;

$this->getComments($post_IDs); でクエリします。クエリは次のとおりです。

$object_IDs = implode(",", $object_IDs);

$query = 
    "SELECT 
        comments.object_ID, comments.object_commented_ID, comments.entity_ID, 
        comments.datetime, comments.text, 
        objects.likes, SUM(IF(likes.user_ID=?, 1, 0)) AS allowLike, 
    users.first_name, users.last_name, userinfo.image_ID FROM comments 
    LEFT JOIN users ON users.entity_ID=comments.entity_ID 
    LEFT JOIN userinfo ON users.entity_ID=userinfo.user_ID 
    LEFT JOIN likes ON likes.object_ID=comments.object_ID 
    LEFT JOIN objects ON objects.ID=comments.object_ID
    WHERE comments.object_commented_ID IN(". $object_IDs .") 
    GROUP BY comments.object_ID ORDER BY comments.datetime ASC LIMIT 0,100";

次に、別の foreach ループで呼び出します

$post->Show(); //Which in turn calls foreach $comment->Show();
于 2013-03-01T10:56:39.283 に答える