使用PHP连接两个表

时间:2019-02-19 12:45:25

标签: php sql phpmyadmin

我对联接一无所知,我在获取逻辑方面确实遇到了麻烦。谁能帮我吗?

这是我的桌子公告:

AnnouncementID      Subject        Header      Status
---------------------------------------------------
1                    Peter        Header 2     Publish
2                     2x2         Header 3     Draft
3                 Resignation     Header 4     Publish

这是另一个表ReadAnnouncements:

AnnouncementID      Username      Status
---------------------------------------------
1                    User 1        Read
2                    User 2        Read
2                    User 3        Read

我希望我的结果成为

AnnouncementID      Username      Status    Header       Subject
---------------------------------------------------------------
1                    User 1        Read     Peter        Header 2
2                    User 2        Read     2x2          Header 3
2                    User 3        Read     2x2          Header 3

请教我已经尝试了两天了,我真的感到很困惑。

            <?php 
               $sql=" SELECT a.AnnouncementID,a.Created,r.Username,a.Status,a.Header,a.Body from Announcements a join ReadAnnouncements r using(AnnouncementID) WHERE a.Status = 'Publish'";
               $result = mysqli_query( $conn,$sql);

                 while($rows = mysqli_fetch_array($result)){
                  $time = date('h:i:s a',strtotime($rows['Created']));
                  $date = date('Y-m-d',strtotime($rows['Created']));
                    if($rows['ReadStatus'] == 'Unread'){
                    echo '
                    <tr class="'.$rows['Status'].'clickable-row" >
                      <strong><td class="view-message  dont-show"><a href="ViewAnnouncement.php?view_id='.$rows['AnnouncementID'].'" style="text-decoration: none " class="text-dark"><div>'.$rows['Header'].'</div></a></td>
                      <td class="view-message "><a href="ViewAnnouncement.php?view_id='.$rows['AnnouncementID'].'" style="text-decoration: none" class="text-dark" ><div>'.substr($rows['Body'],0,90).'</div></a></td>
                      <!--<td class="view-message  inbox-small-cells"><i class="fa fa-paperclip"></i></td>-->
                      <td class="view-message  text-right"><a href="ViewAnnouncement.php?view_id='.$rows['AnnouncementID'].'" style="text-decoration: none" class="text-dark"><div><h6>'.$time.''.'<br>'.''.$date.'</h6></div></a></td></strong></tr>                                        
                    ';                                
                    }else{
                       echo '<strong>
                    <tr class="'.$rows['Status'].'clickable-row" >
                      <strong><td class="view-message  dont-show"><a href="ViewAnnouncement.php?view_id='.$rows['AnnouncementID'].'" style="text-decoration: none " class="text-dark"><div>'.$rows['Header'].'</div></a></td>
                      <td class="view-message "><a href="ViewAnnouncement.php?view_id='.$rows['AnnouncementID'].'" style="text-decoration: none" class="text-dark" ><div>'.substr($rows['Body'],0,90).'</div></a></td>
                      <!--<td class="view-message  inbox-small-cells"><i class="fa fa-paperclip"></i></td>-->
                      <td class="view-message  text-right"><a href="ViewAnnouncement.php?view_id='.$rows['AnnouncementID'].'" style="text-decoration: none" class="text-dark"><div><h6>'.$time.''.'<br>'.''.$date.'</h6></div></a></td></strong></tr>                                        
                    </strong>';                             
                    }

                 } 
              ?>

我想从仅已发布的表公告中选择所有行,并根据用户名和公告ID对其进行读取或未读取对它们进行分类。

4 个答案:

答案 0 :(得分:0)

您可以使用以下查询获取结果。

select a.AnnouncementID,r.Username,r.Status,a.Header,a.Subject
from Announcements a
join ReadAnnouncements r on r.AnnouncementID=a.AnnouncementID

答案 1 :(得分:0)

加入非常简单,check this explanation。 就您而言,您可以执行以下操作:

SELECT A.AnnouncementID, A.Username, R.Status, A.Header, A.Subject FROM Announcements A join ReadAnnouncements R USING(AnnouncementID)

答案 2 :(得分:0)

您可以使用内部联接。 INNER JOIN关键字选择两个表中具有匹配值的记录。

 SELECT a.AnnouncementID,r.Username,r.Status,a.Header,a.Subject
    from Announcements a
    join ReadAnnouncements r using(AnnouncementID)

答案 3 :(得分:0)

使用JOIN子句根据数据库中两个或多个表之间的相关列(在您的情况下为AnnouncementID)组合行。

合并2个表中的数据时,可能有几种组合:

(INNER)JOIN:返回两个表中具有匹配值的记录 左(外)联接:从左表返回所有记录,并从右表返回匹配的记录 右(外)联接:从右表返回所有记录,并从左表返回匹配的记录 FULL(OUTER)JOIN:当左表或右表中存在匹配项时,返回所有记录 (来源:https://www.w3schools.com/sql/sql_join.asp

使用数据库架构,您应该使用:

select * from Announcements as A INNER JOIN ReadAnnouncements as RA ON A.AnnouncementID RA.AnnouncementID

您没有提到您使用的是哪个DBMS,因此上面的SQL查询可能有所不同。