我已经搜索过了,但没有找到我需要的东西,所以如果有人能帮我的话…谢谢分配。
我有两个相同的表,但表名不同,行名不同,如下所示:
名为admins:的第一个表
admin_pid、uname、admin_email、admin_fname、密码、salt、admin_date_created、admin_dte_create、admin_date _update、admin_type、ip、时间戳
另一个表有相同的数据,但行名不同,如下所示:
名为用户的第二个表:
userid、用户名、用户电子邮件、user_fname、密码、salt、admin_user_create、user_date_created、user_date _update、userlevel、ip、时间戳
它们都保存着用户的详细信息,但其中一张表用于管理面板,另一张用于前台。
我在前面的网站上从我的登录功能中选择:
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演示
是的,您可以在SQL UNION语句的帮助下做到这一点:
SELECT userid, username ,userlevel, ip, password, salt FROM users
UNION
SELECT userid, username ,userlevel, ip, password, salt FROM admins
WHERE users.useremail = ? OR admins.useremail = ? LIMIT 1;