从多对多的关系中提取数据

时间:2010-02-06 15:35:20

标签: php mysql

我几天都在努力解决这个问题,但是我已经达到了我公认的有限的mysql知识的极限。我有两个表,组和派对,使用查找表groupparty有两列groupid和partyid。鉴于某一方,我只想拉出与该方相关的群组。以下是我一直在努力解决的剧本:

<?php



include $_SERVER['DOCUMENT_ROOT'] . '/includes/connect.inc.php';

 $partyid = '71';
 $sql = "SELECT groupid FROM groupparty WHERE groupparty.partyid='$partyid'";
 $result = mysqli_query($link, $sql);
 while ($row = mysqli_fetch_array($result))
 {
  $groupids[] = array('groupid' => $row['groupid']);
 }

 $sql = "SELECT groupname FROM groups WHERE id='$groupids'";
 $result = mysqli_query($link, $sql);
 while ($row = mysqli_fetch_array($result))
 {
  $groups[] = array('groupname' => $row['groupname']);
 }

 include 'show.html.php';
 exit();

?>

show.html.php中的html调用:

Group(s):
 <?php foreach ($groups as $group): ?>
 <?php htmlout($group['groupname']); ?>
 <?php endforeach; ?>

这当然给了我以下错误:

 Group(s): 
 Warning: Invalid argument supplied for foreach() in show.html.php on line 2

我知道问题是SELECT groupname FROM groups WHERE id='$groupids'的尝试。但是如何处理这种常见情况呢?

感谢。

1 个答案:

答案 0 :(得分:0)

使用联接只需一个查询即可完成所有操作:

SELECT groups.groupname
FROM groupparty
JOIN groups
ON groups.id = groupparty.groupid
WHERE groupparty.partyid='$partyid'

或者,如果您想继续执行此操作,请使用SQL表达式IN (..., ..., ...)来匹配多个ID中的任何一个。我不建议这样做。