如何仅针对匹配记录显示来自两个表的数据

How to show data from two tables only for matching record

我有两个 table。 第一个存储名为“users”的用户信息

| user | password | email           |
|:---- |:--------:| ---------------:|
| user1  | pass1  | email@email.com |
| user2  | pass1  | email@email.com |
| user3  | pass1  | email@email.com |

和第二个“材料”,它存储有关每个用户拥有什么的信息

| user | lumberjack| farmer etc        |
|:---- |:---------:| -----------------:|
| user1| 10        | 20                |
| user2| 20        | 50                |
| user3| 30        | 40                |

我想从第 2 个 table 获取数据,但仅针对特定用户。

我试过了,但它显示了两个 table 中每个用户的资料。我想要做的是显示第二行 table 中与记录的用户名相同的一行。 例如,如果用户 1 已登录,我想显示他有 10 个伐木工人和 20 个农场,如果用户 2 已登录,则有 20 个伐木工人和 50 个农场等

$sql = "SELECT lumberjack, stonemanson, farmer FROM materials JOIN users ON materials.user = users.user  ";}

  $res = $conn->query($sql);

  if ($res->num_rows > 0)
  {
    while ($row = $res->fetch_assoc())
    {
      echo "Lumberjack: " . $row["lumberjack"]. " Stonemanson: " . $row["stonemanson"]. " Farmer: " . $row["farmer"].  "<br>";
    }
  }

关于您的查询,向其添加 WHERE 子句。

例如如果用户id是26 SQL查询将是

SELECT lumberjack, stonemanson, farmer FROM materials JOIN users ON materials.user = users.user WHERE users.user=26

并检查你的 table 结构,如果你不需要来自 用户的任何数据 table 那么你不应该使用 加入

这也能正常工作,而且会更快 SELECT lumberjack, stonemanson, farmer FROM materials WHERE materials.user =26

注意:使用 query() 会使您的代码容易受到 SQL 注入 您应该使用 Mysqli 或 PDO 准备语句。

Whosebug 对此有很多答案。所以在你解决了你的问题之后,然后开始阅读 SQL injection and use of PDO or Mysqli prepared statement