1

我已经搜索但没有找到我需要的东西,所以如果有人可以帮助我.. 谢谢分配。

我有 2 个相同的表,但表名不同,行名不同,如下所示:

第一个名为admins的表:

admin_pid ,uname, admin_email , admin_fname , 密码 , salt , admin_date_created , admin_date_create , admin_date_update ,admin_type , ip ,timestamp

另一个表具有相同的数据,但行名称不同,如下所示:

第二个表称为users

userid ,用户名,useremail ,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

我想让他们成为在前端站点工作的用户和管理员。

我可以同时选择它们,所以如果用户退出,我将从两个表中检查?

4

2 回答 2

0

如果我理解正确你想使用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 = ? 

注意:为了使其工作列数,它们的位置顺序和来自两个SELECTs 的数据类型应该相同。userlevel您在表中没有名称列admins,所以我正在即兴发挥admin_type。如果不是这种情况,您需要删除此列或从第二次选择中返回一个常数值。

这是SQLFiddle演示

于 2013-09-03T04:53:55.277 回答
-1

是的,您可以在 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;
于 2013-09-03T04:54:06.343 回答