我正在创建一个登录,我有用户A和用户B的单独表。
我想要做的是先检查第一个表中是否有尝试登录的用户在表A中, 如果是,则不会转到表B检查登录凭据,如果不是,请转到表B并检查登录凭据。
表A
SELECT * FROM tableA WHERE userId='$userId' AND password='$password'
表B
SELECT * FROM tableB WHERE accountNumber='$accountNumber' AND password='$password'
注意: 2个表格具有不同的字段名称userId
和accountNumber
。
答案 0 :(得分:3)
我认为你是从客户端获取用户名和密码的值,所以我只会告诉你你要求的内容。
$getUserBasic1=$db->prepare('SELECT * FROM tableA WHERE userId="$userId" AND password="$password"');
$getUserBasic1->execute();
$user= $getUserBasic1->fetchAll();
if(count($user)>0)
{
//if yes do what you want here
}
else
{
$getUserBasic2=$db2->prepare('SELECT * FROM tableB WHERE accountNumber="$accountNumber" AND password="$password"');
$getUserBasic2->execute();
$user2= $getUserBasic2->fetchAll();
//write your code here
}
答案 1 :(得分:1)
您可以使用INNER JOIN
并选择两个表格结果,如果表格A的结果存在则先取结果,否则取表B的结果。
假设两个表都有某种类型的引用,例如用户ID,您可以使用以下内容:
SELECT tbla.*, tblb.* FROM tableA tbla
INNER JOIN tableB tblb ON tbla.userId = tblb.userId
WHERE userId='$userId' OR accountNumber='$accountNumber' AND password='$password'
ORDER BY userId ASC
LIMIT 1
上面的查询使用cross-reference (userId in this case)并在查询结果之前将两个表连接在一起。它在表B之前按表A对结果进行排序,但将结果限制为1,使表A或表B取决于哪个为空。
答案 2 :(得分:1)
尝试组合表格,例如:
SELECT * FROM tableA, tableB WHERE tableA.userId='$userId' AND tableA.password='$password' OR tableB.accountNumber='$accountNumber' AND tableB.password='$password'
我没有检查过,所以可能无法正常工作,但看看这是否能满足您的需求!
答案 3 :(得分:1)
这样的事情:
$sql = "SQL QUERY FOR TABLEA";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// checking if result in TABLE A
}
else{
//search in TABLE B by updating your sql value.
}
我希望您想要检查已注册的用户,最好的方法是保留一个表,然后在那里搜索,并将 userID 保留为主键。