0

我正在尝试执行我认为是对 MySQL 数据库的非常简单的查询。这是我的桌子设置;

表 1 - CMS_AccessLevels

  • 访问权限
  • 标题颜色

表 2 - CMS_Users

  • 用户身份
  • 用户名
  • 用户邮箱
  • 用户头像
  • 用户签名
  • 访问权限

我已经收到了这个查询;

SELECT `titleColor` FROM `CMS_AccessLevels` WHERE `accessLevel` = (SELECT `accessLevel` FROM `CMS_Users` WHERE `userID` = 3)

这可以正常工作并根据两个表之间的匹配返回正确的titleColor值。accessLevel

现在,我想做的也是从中获取一些值CMS_Users。为简单起见,假设我只想获取几个值,所以我的结果集可能如下所示;

userID|username|userAvatar|accessLevel|titleColor
-------------------------------------------------
0     |Scott   |image.png | 6         |#FFFFFF

或作为 PHP 数组(如果上表没有意义,则显示为您可以看到逻辑布局);

array('userID' => $result['userID'],
      'username' => $result['username'],
      'userAvatar' => $result['userAvatar'],
      'accessLevel' => $result['accessLevel'],
      'titleColor' => $result['titleColor'];

假设我想得到userID, userName, userAvatarand accessLevelfrom CMS_Users, and titleColorfrom CMS_AccessLevelswhereCMS_Users.userID等于 '3',记住CMS_AccessLevels.accessLevelCMS_Users.accessLevel 必须匹配。

实际上,在运行查询之前我知道的唯一一条数据是userID.

是否可以通过单个查询来做到这一点?

4

2 回答 2

1

您正在使用子查询,而连接将是正确的选择。你可以尝试类似的东西

SELECT a.titleColor AS titleColor, u.username AS username FROM CMS_users u INNER JOIN CMS_AccessLevels a ON u.accessLevel = a.accessLevel WHERE u.userID = '3'
于 2013-05-28T04:07:13.587 回答
1

尝试这个:

SELECT u.userID, u.username, u.userAvatar, u.accessLevel,  al.titleColor
FROM CMS_AccessLevels al
INNER JOIN CMS_Users u
ON u.accessLevel = al.accessLevel
WHERE u.userID = 3
于 2013-05-28T04:07:23.663 回答