如何在选择查询中获取两个表中的列值


How to get column values in 2 tables in a select query?

所以我有两个名为tbl_admin和tbl_users的表。它们每个都有一个名为acct_type的列。tbl_admin中的所有acct_type值均为1,tbl_users中为0。我知道,如果我只为他们创建一张桌子,对我来说会很容易。我的问题是,我该如何查询,以便将管理员重定向到其页面,将用户重定向到其网页。

这是我的代码

$uname = $_POST['txt_un'];
$pword = sha1($_POST['txt_pw']);
$query = "SELECT * FROM tbl_admin WHERE uname=? AND pword=?";

$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->bindParam(2, $pword);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row > 0) {
    if ($row['acct_type'] == 1) {
        header("Location: adminpage.php");
    } elseif ($row['acct_type'] == 0) {
        header("Location: userspage.php");
    }
} else {
    echo "<script>alert('Incorrect username/password');location.href='../index.php'</script>";
}

我知道它不会工作,因为我只是从tbl_admin查询select。非常感谢您的帮助,谢谢!

假设您的表(tbl_admin、tbl_users)具有相同数量的列并且这两个表中的每个用户条目是唯一的。"如果没有,你将来会遇到一些严重的问题。"

$uname = $_POST['txt_un'];
$pword = sha1($_POST['txt_pw']);
$query = "SELECT * FROM tbl_admin WHERE uname=? AND pword=? UNION SELECT * FROM tbl_users WHERE uname=? AND pword=?";

$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->bindParam(2, $pword);
$stmt->bindParam(3, $uname);
$stmt->bindParam(4, $pword);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row > 0) {
if ($row['acct_type'] == 1) {
    header("Location: adminpage.php");
} elseif ($row['acct_type'] == 0) {
    header("Location: userspage.php");
}
} else {
echo "<script>alert('Incorrect username/password');location.href='../index.php'</script>";
}

有关UNION的更多信息,请查看:http://dev.mysql.com/doc/refman/5.0/en/union.html

编辑:正如Half-Crazed所建议的,只有当两个表中的每个用户都是唯一的时,才应该使用这种方法。如果您有额外的时间,您应该修改获取用户的方式

感谢您在这个查询中帮助我。非常感谢你的回答。我已经发现,出于某些目的,我只会为管理员和用户制作不同的登录表格。