PHP Mysql选择多个不同行名的表


PHP Mysql select multiple tables diffrent row names

我已经搜索过了,但没有找到我需要的东西,所以如果有人能帮我的话…谢谢分配。

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

名为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;