繁体   English   中英

左联接仅在匹配时返回

[英]Left Join Only Returns If Matching

我有两个表(claim_pics&Claiminfo)我正在查询结果页面。

当两个表的表Claim_id(Claiminfo.claim_id = Claim_pics.claim_id)匹配时,它的效果很好。

但是,当只有一个带有Claim_id的表(即在ClaimInfo中)而没有匹配的Claim_id时,该行的所有属性都将显示,但Claim_id除外。

没有claim_id,因此,如果用户单击编辑按钮,则没有claim_id告诉它要去哪里。

无论是否存在匹配项,我都需要它提供Claim_id的$ results。 有什么想法或解决方法吗?

谢谢。

$query   = "SELECT * FROM claiminfo 
                          LEFT JOIN ( claim_pics ) 
                          ON ( claiminfo.claim_id = claim_pics.claim_id )  
            WHERE( userid='$userid' )   
            ORDER BY claiminfo.ts
            DESC LIMIT 200";

//只返回

图片和信息都匹配的claim_ids

                  $result = mysql_query( $query );

                  while( $row = mysql_fetch_assoc( $result ) ) { 


                                    $namelocation =      $row['namelocation'];
                                    $claimholder =   $row['claimholder'];
                                    $occasion =      $row['occasion'];
                                    $geotag =    $row['geotag'];
                                    $lat =   $row['lat'] ;
                                    $lng =   $row['lng'];
                                    $claim_id = $row['claim_id']; 
                                    $img = $row['location'];




                                     $html = " ... "

正如评论所指出的,空的claim_pics行中的null claim_id可能使$row['claim_id']成为空白。 解决此问题的最简单方法是显式选择claiminfo.claim_idclaiminfo.claim_id加上别名:

$query   = "SELECT *, claiminfo.claim_id AS id FROM claiminfo 
                          LEFT JOIN ( claim_pics ) 
                          ON ( claiminfo.claim_id = claim_pics.claim_id )  
            WHERE( userid='$userid' )   
            ORDER BY claiminfo.ts
            DESC LIMIT 200";

然后,您可以可靠地获得与变量claim_id $row['id']

在更一般的注释中,这种情况说明了为什么最好不要使用SELECT *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM