【问题标题】:mysql php table joinmysql php表连接
【发布时间】:2013-09-10 10:13:08
【问题描述】:

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

我有几个表的连接。当我使用 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 时,我可以看到以下内容:

Array ([0] => v [username] => 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,尽管我无法说出原因。 (数字跳过的原因是省略了很多其他无关的字段。)

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    因为您使用过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
    

    【讨论】:

      【解决方案2】:

      试试这个:

      $sql = "SELEcT m.*,mc.*,mc.contactid as mccon 
      from `members` m,
      `membercontact` mc
      WHERE mc.memberid = m.id AND m.id = '147'"
      

      【讨论】:

        【解决方案3】:

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

        <?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 ...."
        

        【讨论】:

          猜你喜欢
          • 2016-10-20
          • 1970-01-01
          • 2015-12-07
          • 2012-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-02
          • 2012-04-27
          相关资源
          最近更新 更多