【问题标题】:PHP/MYSQL query help needed需要 PHP/MYSQL 查询帮助
【发布时间】:2011-08-16 00:42:41
【问题描述】:

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

用户ID、用户名、密码

shopsID,MANAGER_ID(引用 USER_ID),NETWORK_ID

networksID,ADMIN_ID(引用 USER_ID)

我需要做的就是在登录时检查 USERNAME 和 PWD 与 ID 并能够判断刚刚登录的用户是否只是作为经理或网络管理员在商店表中,或两者兼而有之.

这可以通过一个带有 PHP 的 SELECT 来完成吗? 谢谢!

【问题讨论】:

    标签: php mysql sql select


    【解决方案1】:
    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
    

    当这个查询返回时,如果用户是从 shop 表中引用的,shop_id 将是非空的,network_id 也是如此。

    请注意,如果多次从 shop 或 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 运行它们。

    【讨论】:

    • 我使用 MYSQL 和 PHPMyAdmin,你认为 JOIN 需要我在表上强制执行外键吗?
    • 没有。 MySQL 甚至没有真正的外键概念。它们只是符号 IIRC,还没有任何功能。无论如何,您根本不需要外键定义来进行连接。连接标准几乎可以是任何东西……或者什么都不是(对于笛卡尔积)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2011-08-05
    • 2012-02-21
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多