【问题标题】:How to recall items from favourites table如何从收藏夹表中调用项目
【发布时间】:2016-03-21 17:43:08
【问题描述】:

我有一张带有“id”、“userid”和“postid”的收藏夹表。例如,当 'userid' = 1 时,我正在尝试选择 'postid' 中的所有条目。

我还有一个包含“id”和其他内容的帖子表。然后我想选择 'postid'='id' 的所有行,然后回显这些行的内容。

基本上过滤用户收藏的帖子。

我得到的是

<?php
include 'connect.php';
$user = $_SESSION['id'];
$getfaves = mysql_query("SELECT postid FROM Favourites where userid='$user'") or die(mysql_query());
if ($rowfave = mysql_fetch_assoc($getfaves))
    {
        $faveposts = $rowfave['id'];

        $getposts = mysql_query("SELECT * FROM Posts where id='$faveposts' ORDER BY id DESC");
        while ($row = mysql_fetch_assoc($getposts))
        {
            $content = 'content';
            echo ($content);
        }
    }
?>

($content = 'content'; 只是一个例子,它不是我在代码中实际使用的)

显然这是不正确的,可能是因为我想选择一个 id 列表,然后搜索该列表中的所有内容,但我只编写了代码来查找一项。但是我不知道如何纠正这个问题。

提前感谢您的帮助。

【问题讨论】:

  • posts 的架构是什么? id是用户id还是帖子的id?
  • 在帖子中,'id'是帖子的id
  • 代码看起来是正确的,你在第二个循环中实际打印了什么?如果您打印该行,您应该可以正确看到帖子
  • 你可以使用这个查询“SELECT * FROM Posts where id IN (SELECT postid FROM Favorites where userid='$user') ORDER BY id DESC”
  • @Fabio 只是一张图片和一些文字,应该没有什么问题。

标签: php mysql database get posts


【解决方案1】:

有一种更简单的方法可以在INNER JOIN 的帮助下使用一个 sql 查询来做到这一点。 所以你的查询将是

SELECT POST.*
FROM `Favourites`
INNER JOIN `Post`
ON Post.id = Favourites.postid WHERE (Favourites.userid='$user')
ORDER BY Post.id DESC;

here 是关于INNER JOIN 及其实用程序的文档

如果您需要更多帮助,请告诉我,

php部分:

<?php
include 'connect.php';
$user = $_SESSION['id'];
$sql="SELECT POST.*
    FROM `Favourites`
    INNER JOIN `Post`
    ON Post.id = Favourites.postid WHERE (Favourites.userid='$user')
    ORDER BY Post.id DESC";
$conn = new mysqli($servername, $username, $password,$dataBase);
  $Result = $conn->query($sql);
  while($row = $Result->fetch_assoc()) {
    //do what you want with the $row, it contain ur resault
  }
?>

如果有问题,请随意测试并报告问题

【讨论】:

  • 谢谢,会试一试的。我将如何将其格式化为 mysql_query ,就像我在原始代码中所做的那样?抱歉,如果是愚蠢的问题,对 php 还是很陌生
  • 只需像这样放入变量-> $sql = "SELECT POST.* FROM Favourites INNER JOIN Post ON Post.id = Favourites.postid WHERE (Favourites.userid='$用户') 按 Post.id DESC 排序"; 我将编辑我的答案以涵盖 php 部分
  • 谢谢。我知道使用 PDO 是最佳做法,但没有它我会更舒服
  • 好的,您可以使用任何类型的连接,只需确保将我给您的 sql 查询放入变量中(在我的示例中为 $sql)
  • 使用mysql_query() 函数,您正在为每个插入创建一个新语句,您可能会超出允许的限制。所以我担心你的代码永远不会成功,尝试使用我发布的代码,它不是 PDO,它只是 mysqli 而不是 mysql_query,如果你遵循了我在最后评论中发布的说明,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
相关资源
最近更新 更多