这应该很简单。 我有三个表(显示相关列)。
用户 : ID,USERNAME,PWD
商店:ID,MANAGER_ID(引用 USER_ID),NETWORK_ID
networks:ID,ADMIN_ID(引用 USER_ID)
我需要做的就是在登录时,根据 ID 检查 USERNAME 和 PWD,并能够判断刚刚登录的用户是否只是作为经理或网络管理员在 shops 表中,或者两者兼而有之.
这可以用一个单一的 SELECT 和 PHP 来完成吗? 谢谢!
最佳答案
SELECT
users.id AS user_id,
shops.id AS shop_id,
networks.id AS network_id
FROM users
LEFT OUTER JOIN shops
ON shops.manager_id = users.id
LEFT OUTER JOIN networks
ON networks.manager_id = users.id
WHERE users.username = ?
AND users.pwd = ?
LIMIT 1
当此查询返回时,如果用户是从 shops 表中引用的,shop_id
将为非空,network_id
也是如此。
请注意,如果多次从 shops 或 networks 表中引用用户,则此查询只会产生一行;根据您的问题,我假设您不关心用户与哪个商店/网络相关联,您只想检查此类关联。
或者,这个查询也可以:
SELECT
users.id AS user_id,
EXISTS (SELECT shops.id
FROM shops
WHERE shops.manager_id = users.id)
AS has_shop,
EXISTS (SELECT networks.id
FROM networks
WHERE networks.admin_id = users.id)
AS has_network
FROM users
WHERE users.username = ?
AND users.pwd = ?
其中一个查询可能比另一个查询更快,这取决于您在表上设置的索引以及您的 MySQL 版本。如果性能有问题,请考虑通过 EXPLAIN
运行它们。
关于需要 PHP/MYSQL 查询帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067814/