【问题标题】:Include two different tables in MySQL query在 MySQL 查询中包含两个不同的表
【发布时间】:2013-05-26 00:31:31
【问题描述】:

首先我很抱歉。这可能是一个相当基本的问题,但我对此很陌生,无法在 Google 上找到答案。我有以下 MySQL 查询:

SELECT * FROM profile WHERE status = 'completed' ORDER BY RAND() LIMIT 6

我的数据库中的成员帐户有两个表。简介和成员。个人资料包括他们的职位、公司等详细信息,然后会员存储他们的 MD5 密码、全名和 cookie 令牌。现在,两者都有一个状态列。个人资料一有三个选项:不,需要照片和完成。成员状态栏还有另外三个:非活动、活动和终止。我需要一个可以选择的命令

from profile where status = 'completed' and members where status = 'active'

我怎样才能做到这一点?所以查询将随机选择六个拥有活跃和完整个人资料的成员?提前谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    首先,您需要在两个表中创建一个列,共享相同的值用于共同条目。 Foreign KeyPrimary Key

    假设两个表都有一个id 列。

    这是你的 SQL:

      select * from profile as p and member as m where p.id=m.id and p.status='completed' and m.status='active'
    

    【讨论】:

      【解决方案2】:

      在不知道链接这两个表的列的名称是什么的情况下,我无法给出确切的查询,但这应该向您展示基本概念是什么。

      SELECT 
          * 
      FROM 
          profile,
          members
      WHERE 
          profile.membersid = members.id
      AND profile.status = 'completed' 
      AND members.status = 'active'
      ORDER BY 
          RAND() 
      LIMIT 6
      

      【讨论】:

        【解决方案3】:

        您应该查看联接。

        尝试类似:

        SELECT * FROM profile p
         LEFT JOIN members m ON m.profile_id = p.id
        WHERE p.status = "completed" and m.status = 'active'
        

        您可能需要更改 LEFT JOIN 行,这取决于 2 个表之间的链接。可能只是m.id = p.id

        【讨论】:

          【解决方案4】:
          SELECT p.* FROM `profile` AS p, `members` AS m WHERE p.`ID` = m.`ID` AND p.`status` = "completed" AND m.`status` = "active"
          

          您可以像上面一样在一个查询中使用两个表。您可能需要添加列 ID 以将它们连接在一起。建议将这些设为主要。

          请注意p.* 是必需的,否则SQL 将给出错误,即表中存在两个同名字段(statusID

          还尝试对表和列使用反引号,尤其是在使用 MySQL 可能使用的名称时;例如statusID

          【讨论】:

            猜你喜欢
            • 2015-08-08
            • 2020-10-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-19
            • 2013-11-26
            相关资源
            最近更新 更多