【问题标题】:Inner join of two tables [UPDATED]两个表的内连接 [更新]
【发布时间】:2019-08-07 11:17:10
【问题描述】:

老师

lrn
fname
lname
email
image
schedule

tbl 用户

lrn
fname
lname
email
image
account-type

$id=$_SESSION['id'];

$get_record_sched = mysqli_query ($db, "SELECT schedule FROM teacher INNER JOIN users ON teacher.lrn = users.lrn WHERE teacher.lrn = '$id'");

我想根据登录帐户的 ID 回显确切的时间表。但是有了这个,查询,就没有输出了……

【问题讨论】:

  • mysqli_error() 需要连接作为参数。您是否也从该查询中获取结果?
  • 是的,先生,我做到了……我只是可以得到具体的时间表
  • 您的两个表似乎都不包含 ID 列。另外,如果 TEACHER 表中已经存在 SCHEDULE 列,为什么还要加入呢?
  • @anne 您在 WHERE 部分重复加入条件,这是不必要的。相反,您可能希望将用户用户提供的 id 以参数的形式放在那里: WHERE users.lrn = $idFromUser

标签: php mysql mysqli inner-join


【解决方案1】:

在你那里条件错误。他们没有任何参数来验证条件。所以像这样改变

"SELECT schedule FROM teacher INNER JOIN users  ON teacher.id = users.id WHERE 1  "

在连接中使用相同的 where 条件

"SELECT schedule FROM teacher INNER JOIN users  ON teacher.id = users.id AND teacher.schedule = users.id   WHERE 1  "

如果您在会话中记录了使用过的 id,例如

$id=$_SESSION['user_id'];

"SELECT schedule FROM teacher INNER JOIN users ON teacher.id = users.id WHERE teacher.schedule='$id' "

【讨论】:

  • 你是对的。如果我格式化了我的代码。他们的回答是非常日志。现在没有必要
  • 最后一个代码不起作用,我有 $id=$_SESSION['id'];我试过你说的,但它仍然没有显示确切的时间表
  • 你在$id=$_SESSION['id']之前打电话给session_start()
  • session_start(); if(isset($_SESSION["id"])) { $id = $_SESSION["id"];
  • ok 做一件事echo "SELECT schedule FROM teacher INNER JOIN users ON teacher.id = users.id WHERE teacher.schedule='$id' "; exit(); 用phpmyadmin复制粘贴到。并告诉是否有任何错误
【解决方案2】:

你说你有来自会话的$id。假设lrn这列是ID,那么

Select t.schedule
From teacher t
Where t.lrn = $id

无需将表与用户表连接。

请注意,建议使用参数绑定。

$statement = $connection->prepare("Select t.schedule From teacher t Where t.lrn = ?");
$statement->bind_param("s", $id);

【讨论】:

  • 这个答案很关键!使用更多准备好的语句,这通常应该是常见的做法。
猜你喜欢
  • 2020-04-04
  • 2013-08-08
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多