[英]mysql php table join
我可能正在做一些愚蠢的事情,但是已經為此工作了一天,似乎找不到錯誤。
我有幾個表的聯接。 當我使用print_r(mysql_fetch_array($ res)打印出結果時,我看到了我想要的字段的值。但是,當我嘗試將其回顯或以其他方式訪問它時,它似乎是空的。我在做什么錯?預先感謝,因為這使我發瘋。
表(省略一些字段)
members
id|username|password|datetime|email
membercontact
id|memberid|contactid
php
$sql = "SELEcT m.*,mc.*,mc.contactid as mccon
from `members` m
LEFT JOIN `membercontact` mc
on m.id = mc.memberid
WHERE m.id = '147'"
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)) {
echo $row['contactid'];
echo $row['mccon']
}
輸出:沒有。 我還嘗試了其他方法來訪問contactid字段。 其他字段也會打印,例如$ row ['password']
但是,當我在結果上使用print_r時,我可以看到以下內容:
數組([0] => v [用戶名] => v [1] =>通過[密碼] =>通過[2] => 147 [id] => 147 [3] => 2013-09-05 12: 08:03 [datetime] => 2013-09-05 12:08:03 [4] => vz@aol.com [電子郵件] => v@aol.com [19] => 933 [contactid] => 933 [20] => 147 [memberid] => 147 [24] => 933 [contactid] => 933)
我唯一奇怪的是,有些字段重復了不止一次,盡管我無法說出原因,但值得注意的是, contactid重復了多次。 (之所以跳過數字,是因為省略了許多其他無關的字段。)
因為您使用過LEFT JOIN
並且如果存在一對多關系,則可能必須使用GROUP BY
$sql = "SELEcT m.*,mc.*,mc.contactid as mccon
from `members` m
LEFT JOIN `membercontact` mc
on m.id = mc.memberid
WHERE m.id = '147'"
GROUP BY m.id
嘗試這個:
$sql = "SELEcT m.*,mc.*,mc.contactid as mccon
from `members` m,
`membercontact` mc
WHERE mc.memberid = m.id AND m.id = '147'"
它不是聯接問題,它是如何從每個表中選擇列的。 檢查以下來源
<?php
$query="select 'hame1' as name, 'name2' as name";
$con = mysql_connect ('localhost','root','root',true) or die ('connection to db failed');
mysql_select_db('test_db',$con);
$res=mysql_query($query);
if($res){
while($row=mysql_fetch_array($res)){
var_dump($row);
}
}else{
echo mysql_error($con);
}
?>
將輸出
array
0 => string 'hame1' (length=5)
'name' => string 'name2' (length=5)
1 => string 'name2' (length=5)
您可能會爭辯說,如果我只取兩個值,為什么要分配三個值。 兩個列別名的名稱相同,即name
。 如果要解決此問題,請確保您的列名不沖突,並且select only desired columns from each table that is efficient and readable also, if column names collide give it an alias
例如
$query="SELEcT m.column1,m.column2 ,mc.column1 as mc_column1 ...."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.