2010-02-06 39 views
1

我一直在努力解決這個問題幾天了,但我已經達到了我公認的有限的mysql知識的極限。我有兩個表,組和派對,使用帶有兩列groupid和partyid的查找表groupparty。鑑於特定的一方,我只想撤出與該方有關的團體。下面是腳本的裸露的骨頭我一直在掙扎:將數據從多對多關係中拉出來

<?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'的企圖。但是,如何處理這種常見情況呢?

謝謝。

+0

你應該首先初始化'$ groupids'和'$ groups'數組。 – poke 2010-02-06 15:41:37

+0

謝謝 - 這擺脫了一個錯誤! – PeterC 2010-02-06 16:00:04

回答

0

使用加入到做整個事情只是一個查詢:

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

或者,如果你想繼續你做它使用SQL表達式IN (..., ..., ...)匹配一些ID中的任意一個方式。我不會推薦這個。

+0

感謝馬克 - 所以我現在 \t $ SQL =「SELECT groups.groupname \t \t FROM groupparty \t \t加入羣組 \t \t ON groups.groupid = groupparty.groupid \t \t WHERE groupparty.partyid ='$ partyid'「; \t $ result = mysqli_query($ link,$ sql); \t而($行= mysqli_fetch_array($結果)) \t { \t \t $基團[] =陣列( '組名'=> $行[ '組名']); \t} 並且得到錯誤: 警告:mysqli_fetch_array()預計參數1被mysqli_result,在給定的index.php線布爾12 我已經看到了一個在過去兩天幾次... :-D – PeterC 2010-02-06 15:48:05

+0

使該'mysqli_query($ link,$ sql)或死(mysqli_error($ link)。':'。$ sql);'並查看錯誤消息。 – VolkerK 2010-02-06 15:57:34

+0

@girosole:你有我的查詢的早期版本,我錯誤地鍵入列名稱。嘗試刷新頁面:groups.groupid應該是groups.id。如果你想成爲一個Web開發人員,你將需要學習如何自己調試錯誤。 :) – 2010-02-06 15:59:44