我已经搜索过但没有找到我需要的东西,所以如果有人能帮助我..谢谢 allot。
我有 2 个相同的表,但表名不同,行名也不同,如下所示:
第一个名为admins的表:
admin_pid ,uname, admin_email , admin_fname , password , salt , admin_date_created , admin_date_create , admin_date_update ,admin_type , ip ,timestamp
另一个表有相同的数据,但行名称不同,如下所示:
第二个表称为用户:
userid, username,useremail,user_fname, password, salt,admin_user_create, user_date_created, user_date_update, userlevel, ip, timestamp
它们都包含用户详细信息,但一个表用于管理面板,另一个用于前端站点。
我在前台网站上从我的登录功能中选择:
if ($stmt = $mysqli->prepare("SELECT userid, username ,userlevel, ip, password, salt FROM users WHERE useremail = ? LIMIT 1")) {
$stmt->bind_param('s', $email); // Bind "$email" to parameter.
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
$stmt->bind_result($user_id, $username,$usrlvl, $ip , $db_password, $salt); // get variables
我想让他们成为在前端网站上工作的用户和管理员。
我可以同时选择它们以便在用户退出时从两个表中进行检查吗?
最佳答案
如果我没理解错你想使用UNION ALL
SELECT userid, username ,userlevel, ip, password, salt
FROM
(
SELECT userid, username, userlevel, ip, password, salt, useremail
FROM users
UNION ALL
SELECT admin_pid, uname, admin_type, ip, password, salt, admin_email
FROM admins
) q
WHERE useremail = ?
或
SELECT userid, username, userlevel, ip, password, salt
FROM users
WHERE useremail = ?
UNION ALL
SELECT admin_pid, uname, admin_type, ip, password, salt
FROM admins
WHERE admin_email = ?
注意:为了让它处理列数,它们的位置顺序和来自两个 SELECT
的数据类型应该相同。 admins
表中没有名称为 userlevel
的列,因此我即兴使用 admin_type
代替。如果不是这种情况,您需要消除该列或从该列的第二次选择中返回一个常量值。
这是 SQLFiddle 演示
关于PHP Mysql 选择多个表不同的行名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18584122/