【问题标题】:Advice on MySQL JOIN关于 MySQL JOIN 的建议
【发布时间】:2012-08-23 13:10:23
【问题描述】:

我正在努力让我了解 MySQL Join 功能。

这是我有的两张桌子:

用户表:

admin_id     username
  *1          peter93
   2       stackoverflowrocks
   3          user3*

管理员详情表:

   admin_username     description        image
       pedro93          [text]        [image_url]
 stackoverflowrocks     [text]        [image_url]
        user3           [text]        [image_url]

我知道通常将两个数据库链接在一起你会使用 ID 号,但在这种情况下,我想加入两个表,其中 admin_username = 用户名。

谁能帮帮我?如果有帮助,它适用于 PHP 脚本。

提前致谢! 彼得

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:

    所以没关系。你可以加入任何你喜欢的东西。

    select * 
    from user
        inner join admin
        on user.username=admin.admin_username
    

    【讨论】:

    • 请注意,使用非索引列连接会导致性能下降。对于大型表,它可能会慢 100 倍。
    • 您好,我正在使用您的方法,效果很好,但我尝试添加 WHERE LIKE 子句,但现在没有结果?
    • 在这里提供帮助的是我的完整查询(我知道它与问题中的示例有点不同)
    • SELECT * FROM ticket_agents t INNER JOIN user u ON (t.admin_id = u.user_id) WHERE u.username LIKE 'peter%'
    • 查询没有任何问题。在 admin 表中,admin_username 是 pedro,而不是 peter。 (这就是人们加入 ID 的原因,顺便说一句)
    【解决方案2】:

    按字符串列加入和按Id加入是一样的

    select * from admin_table
    inner join admin_details on admin_table.username = admin_details.admin_username
    

    但请确保您有用户名列并为其编制索引,否则当您有大量记录时,您的查询会变慢

    【讨论】:

    • 我在发布问题后在线阅读,我现在正在尝试!
    • @podiluska 同意了。我很着急:)
    【解决方案3】:

    您几乎可以加入任何字段,但您可能希望牢记数据类型不匹配、索引等

    所有用户

    SELECT u.*, a.*
    FROM users AS u
    LEFT JOIN admin AS a 
           ON u.username = a.username
    

    所有管理员用户

    SELECT u.*, a.*
    FROM users AS u
    INNER JOIN admin AS a 
           ON u.username = a.username
    

    所有管理员

    SELECT u.*, a.*
    FROM users AS u
    RIGHT JOIN admin AS a 
           ON u.username = a.username
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2011-11-04
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多