php - 编辑 MySQL 查询以获取来自同一查询中不同表的用户的喜欢并显示是否喜欢

标签 php mysql sql database

大家好,我有两张 table ,第一个叫做“帖子”,看起来像这样

id    picture    title    description    poster    ip    posterid    .....
123   img-2.jpg  Title 1  Desc 1         Poster    xx    1

第二个表称为“love”,如下所示

id    ip    userid    postid    created
1     xx    1         123       date   

这就是我的 MySQL 查询的实际样子:

<?php

// Get records from the database
    $query = $db->query("SELECT * FROM posts ORDER BY id DESC LIMIT 10");

    if($query->num_rows > 0){ 
        while($row = $query->fetch_assoc()){ 
            $postID = $row['id'];
    ?>

          <!-- POST ITEM START -->
          <div class="post-item">
            <div class="post-asset image">
              <img src="uploads/<?php echo $row['picture']; ?>">
            </div>
            <div class="post-header">
              <h3 class="post-title"><a href="#" data-loader="show"><?php echo $row['title']; ?></a></h3>
              <span class="post-category">

                <a class="favorite-button" href="#" data-post="<?php echo $row['id']; ?>" data-userid="<?php echo $_SESSION['user_id'];?>"><span class="favorite-button-icon fa fa-star-o"></span></a>

              </span>

              <span class="post-date font17"><i class="fa fa-clock-o"></i> <?php $timeago=get_timeago(strtotime($row['created'])); echo $timeago;?></span>
              <span class="post-comments font17"><i class="fa fa-comments-o"></i> 1,3k Reaktionen</span>
            </div>
            <div class="post-footer">
              <a href="#" class="post-author">
                <span class="author-img"><img src="img/avatar.png"></span>
                <span class="author-name">OnePost von<b><?php echo $row['poster']; ?></b></span>
              </a>
              <div class="post-extra">
                <!--<div class="add-favorite" id="heart-container"><span class="lovecount">112</span><input data-post="123" data-user="Jessica Jones" type="checkbox" id="toggle" onclick="myFunction(this)" checked><div id="twitter-heart" class=""></div></input></div>-->

                <div class="add-favorite" id="heart-container"><a href="#" title="Alle Loves anzeigen"><span class="lovecount"><?php echo $row['loves']; ?></span></a>

                <!--<input data-post="<?php echo $row['id']; ?>" data-userid="<?php echo $_SESSION['user_id'];?>" type="checkbox" id="toggle" class="toggle love" onclick="myFunction(this)">-->
                <input data-post="<?php echo $row['id']; ?>" data-userid="<?php echo $_SESSION['user_id'];?>" type="checkbox" id="toggle" class="toggle">

                  <div id="twitter-heart" class=""></div></input></div>
                <div class="post-share"><i class="fa fa-share-alt"></i>
                  <div class="social-links">
                    <a href="#" class="share-facebook social-links-a" data-network="Facebook" data-post="<?php echo $row['id'] ?>" data-url="https://onepost.eu/neu/post.php"><i class="fa fa-facebook"></i></a>
                    <a href="#" class="share-twitter social-links-a" data-network="Twitter" data-post="<?php echo $row['id']; ?>" data-url="https://onepost.eu/neu/post.php"><i class="fa fa-twitter"></i></a>
                    <a href="#" class="share-google-plus social-links-a" data-network="Pinterest" data-post="<?php echo $row['id']; ?>" data-url="https://onepost.eu/neu/post.php"><i class="fa fa-pinterest"></i></a>
                    <a href="#" class="share-whatsapp social-links-a" data-network="WhatsApp" data-post="<?php echo $row['id']; ?>" data-url="https://onepost.eu/neu/post.php"><i class="fa fa-whatsapp"></i></a>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <!-- POST ITEM END -->

          <div class="form-mini-divider"></div>

          <?php } ?>






          <div class="form-divider"></div> -->
        <div class="show_more_main" id="show_more_main<?php echo $postID; ?>">

          <button id="<?php echo $postID; ?>" class="show_more button circle block green">Mehr OnePosts</button>
          <button class="postloading button circle block green" style="display: none;">Lade...</button>


        </div>

        <?php } ?>

我现在想要做的是了解具有 session ID(也是用户 ID)的实际用户是否喜欢该帖子,并在是否喜欢该帖子中显示它。

最佳答案

使用 LEFT JOIN 到 love 表,并使用 IS NOT NULL 条件检查该帖子是否确实受到喜爱/喜欢:

<?php

// Get records from the database
    $stmt = $db->prepare("
        SELECT p.*, (l.postid IS NOT NULL) as is_liked
        FROM posts p
        LEFT JOIN love l
          ON  l.postid = p.id
          AND l.userid = ?
        ORDER BY p.id DESC
        LIMIT 10
    ");
    $stmt->bind_param('i', $currentUserId);
    $stmt->execute();
    $result = $stmt->get_result();

    if($result->num_rows > 0){ 
        while($row = $result->fetch_assoc()){ 
            $postID = $row['id'];
    ?>

    [...]

您可以使用 $row['is_liked'] 访问值,其中将包含 10

您需要将 $currentUserId 替换为保存当前使用 ID 的变量。这可能是 $_SESSION['userid']

关于php - 编辑 MySQL 查询以获取来自同一查询中不同表的用户的喜欢并显示是否喜欢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57127668/

相关文章:

javascript - php-ajax : how to use two submit button on form every one work for different purpose

javascript - 在客户端/服务器通信中使用这两种不同的风格有什么优缺点吗?

javascript - 需要将变量从 javascript 传递到 php 而无需刷新或提交

MYSQL SUM 用于不同表中的两个多列

sql - 从 R 连接到 Azure 数据库

php - 连接和两个可能的 where 子句

php - 我想在报告评论后保持在同一页面上

php - 将此函数转换为 PDO

java - 使用PreparedStatement的SQLite函数

c# - 如何在 C# 中使用表名从数据库中获取 DataTable 对象?