0

我可能在做一些愚蠢的事情,但已经为此工作了一天,似乎找不到错误。

我有几个表的连接。当我使用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] => pass [password] => pass [2] => 147 [id] => 147 [3] => 2013-09-05 12: 08:03 [日期时间] => 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虽然我不能说为什么。(数字跳过的原因是省略了很多其他无关的字段。)

4

3 回答 3

0

因为您已经使用过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
于 2013-09-06T10:35:58.337 回答
0

尝试这个:

$sql = "SELEcT m.*,mc.*,mc.contactid as mccon 
from `members` m,
`membercontact` mc
WHERE mc.memberid = m.id AND m.id = '147'"
于 2013-09-06T10:37:15.113 回答
0

它不是连接问题,而是您如何从每个表中选择列。检查以下来源

<?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)

如果我只获取两个值,您会争论为什么要三个值。它的 bcz 两个列别名的名称相同,即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 ...."
于 2013-09-06T10:59:29.793 回答