我正在尝试执行我认为对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
,userAvatar
,accessLevel
和CMS_Users
,以及{{1来自 titleColor
,其中CMS_AccessLevels
等于'3',记住CMS_Users.userID
和CMS_AccessLevels.accessLevel
必须匹配
实际上,在运行查询之前我知道的唯一数据是CMS_Users.accessLevel
。
是否可以使用单个查询执行此操作?
答案 0 :(得分: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'
答案 1 :(得分: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