2012-01-19 37 views
0

我很想得到一些帮助。我使用php和MySQL来构建一个网站。我目前有3张桌子,我会在例子中减少。基本上我有一个用户表,一个组表和一个组链表。我拥有的是来自用户表的uid。在php和MySQL中匹配和返回行

我应该如何去php中,让我可以说,匹配users-uid grouplink-uid,获取它匹配的grouplink-gid,将grouplink-gid匹配到groups-gid并返回groups-grpname ?然后继续一段时间循环,以显示用户所关联的所有组名。

在此先感谢那些愿意伸出援手的人。

用户

------- 
| uid | 
------- 
| 1 | 
------- 

--------------- 
| gid |grpname| 
--------------- 
| 1 | grp1 | 
--------------- 
| 2 | grp2 | 
--------------- 

grouplink

------------------- 
| glid| uid | gid | 
------------------- 
| 1 | 1 | 1 | 
------------------- 
| 2 | 1 | 2 | 
------------------- 

uid是FK到用户的uid,而GID是FK成群

回答

3

这只是一个简单的2路连接查询到GID:

SELECT users.uid, groups.gid, groups.grpname 
FROM users 
INNER JOIN grouplink ON users.uid = grouplink.uid 
INNER JOIN groups ON grouplink.gid = groups.gid 

连接查询结果的实际检索是不超过一个表的不同查询 - 你有更多的领域需要处理。

+0

Ahh,INNER JOINS。我在学习MySQL时跳过了一个主题。哦,看看我不得不付出的代价。好东西有这​​个地方。谢谢,蕾。 –

1

的SQL查询,将得到你要寻找的是这样的(假设grouplink表中没有空值):

SELECT u.uid, g.gid, g.grpname 
FROM users u 
JOIN grouplink gl ON u.uid = gl.uid 
JOIN groups g ON gl.gid = g.gid 
1

这里有一种方法:

SELECT users.uid, groups.gid, groups.grpname 
FROM users u, groups g, grouplink gl 
WHERE g.id = gl.gid 
AND gl.uid = u.uid 
+0

+1表示别名。我总是忘记使用这些。 –

1

当用户id的变量$iUserId可以查询以下SQL字符串:

$sSql = "SELECT groups.`grpname` FROM groups 
    INNER JOIN grouplink ON groups.`gid` = grouplink.`gid` 
    WHERE grouplink.`uid` = '" . intval($iUserId) . "'"; 
$rRes = mysql_query($sSql); 
$aGroups = array(); 
while (($aRow = mysql_fetch_array($rRes)) !== false) { 
    $aGroups[] = $aRow['grpname']; 
} 

现在,与用户关联的所有组都位于数组$aGroups中。