【问题标题】:PHP While loop not not retrieving more than one row in SQL that uses JOIN LEFTPHP While 循环不会在使用 JOIN LEFT 的 SQL 中检索多于一行
【发布时间】:2014-04-23 13:21:11
【问题描述】:

我正在制作一个 PHP SQL 数据库来编目短篇小说。在显示故事摘录的索引页面上,我正在尝试使用 while 循环函数将表(故事)中的 sql 行显示为无序列表。故事的评分保存在另一个表中,我使用 LEFT JOIN 和唯一列行“id”和“storyid”将其链接到“故事”表。

加载后,数据显示正常,但只显示一个 SQL 行,我的限制设置为 50。while 循环脚本和 sql(close) 脚本位于列表项的两侧。没有错误消息报告。

谁能说明为什么只显示 1 个项目?

    <?php
            include("db.php");
            $query="SELECT s.*, AVG(r.rank) AS avrank
            FROM (SELECT *
                  FROM stories
                  WHERE id BETWEEN 1 AND 100
                  ORDER BY RAND()
                  LIMIT 50) AS s
            LEFT JOIN ratings AS r ON r.storyidr = s.id";
            $result=mysqli_query($connection,$query);
            ?>

    <ul id="tiles">
      <?php     
            while ($data = mysqli_fetch_assoc($result)):
            $id = $data['id'];
            $author = $data['author'];
            $page_path = $data['page_path'];
            $title = $data['title'];
            $avgrate = $data['avrank'];
            if(is_null($page_path)){$page_path = "#";}
            ?>
      <li>
        <div class="post-info">
          <h3><a href="create_page.php?id=<?php echo $id; ?>"><?php echo $title; ?></a></h3>
          <h3>rating is <?php echo $avgrate; ?>/5</h3>
          <span><a href="categories/<?php echo $category; ?>.php">
          <label> </label>
          </span> </div>
        <div class="post-info-rate-share">
          <form method="POST" action="rating.php?id=<?php echo $id; ?>">
            <fieldset class="rating">
              <legend> Rating: <?php echo $avgrate=round($avgrate,2); ?>/5</legend>
              <input type="radio" id="star5" name="starno" value="5" onclick="this.form.submit()"/>
            </fieldset>
          </form>
        </div>
      </li>
      <?php
            endwhile;
            mysqli_close($connection);
            ?>
    </ul>

【问题讨论】:

  • 您是否在 PHPMyAdmin 或类似工具中尝试过查询?
  • 解决问题的好主意,我刚刚做到了,而且它也只提取了一项。我猜这就是我的错误所在?

标签: php sql while-loop


【解决方案1】:

你错过了GROUP BY

SELECT s.*, AVG(r.rank) AS avrank
FROM stories s                  
LEFT JOIN ratings AS r ON r.storyidr = s.id
WHERE id BETWEEN 1 AND 100
GROUP BY s.id
ORDER BY RAND()
LIMIT 50;

演示:http://sqlfiddle.com/#!2/7a9fa/9

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2016-12-28
    • 2013-10-27
    • 2023-03-21
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多