簡體   English   中英

MySQL的PHP​​表聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM