需要 PHP/MYSQL 查询帮助

标签 php mysql sql select

这应该很简单。 我有三个表(显示相关列)。

用户 : 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/

相关文章:

php - 这个查询迭代是否可能

mysql - 仅在一个数据库上授予文件

mysql - jdbc 驱动程序 "org.gjt.mm.mysql.Driver"有什么用?

mysql - 两个图像表还是一个用于存储默认图像的表?

sql - 棘手的事件记录关系——多态双向自引用

php - 如何向 OpenCart 错误日志添加评论?

php preg_replace 问号 ("?") - 不工作

sql - 某种右连接

php - 使用 time() 函数时间戳查询以获取更多行以附加到当前获取的行。 MySQL/PHP

mysql - 根据 JSON-Object 键值在表中查找行