2017-03-17 79 views
1

我的目標是顯示所有用戶的名稱及其針對特定匹配的可用性。下面的代碼就是這樣做的。可能不是最簡單的方法,但我是新手,現在可以工作。MySQL:僅顯示尚未從另一個表中顯示的表中的信息

//Display match dates and times(showing all matches) 
$stmt = $conn->prepare('SELECT * FROM matches 
         WHERE tid=:tid /*AND datetime BETWEEN (NOW() + INTERVAL 24 HOUR) AND (NOW() + INTERVAL 28 DAY)*/ 
         ORDER BY datetime'); 
$stmt->bindParam(':tid', $tid, PDO::PARAM_INT); 
$stmt->execute(); 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo " 
     <h2>".date("F j",strtotime($row["datetime"])). " @ ".date("g:i A",strtotime($row["datetime"]))."<br></h2>        
     <h3>"$row[location] Match <br> vs $row[opponent]</h3>"; 
     echo "<table>    
     <tr> 
      <th>Player</th> 
      <th>Availability</th> 
     </tr> 
     </table>"; 


//Get available(Yes) users first and last names to display         
$stmtY = $conn->prepare("SELECT user.first, user.last 
         FROM user 
         INNER JOIN match_part ON user.uid=match_part.uid 
         WHERE mid=:mid AND availability = 'Yes'"); 
$stmtY->bindParam(':mid', $row['mid'], PDO::PARAM_INT); 
$stmtY->execute(); 
    while ($rowY = $stmtY->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo "<table class='match-avail'>    
     <tr> 
      <td>$rowY[first] $rowY[last]</td> 
      <td><span style='color: #70db62'>&#10004;</span></td> 
     </tr> 
     </table>"; 
    } 

//Get unavailable(No) users first and last names to display 
$stmtN = $conn->prepare("SELECT user.first, user.last 
         FROM user 
         INNER JOIN match_part ON user.uid=match_part.uid 
         WHERE mid=:mid AND availability = 'No'"); 
$stmtN->bindParam(':mid', $row['mid'], PDO::PARAM_INT); 
$stmtN->execute(); 
    while ($rowN = $stmtN->fetch(PDO::FETCH_ASSOC)) 
    { 
     echo "<table class='match-avail'>    
     <tr> 
      <td class='Avail_No'>$rowN[first] $rowN[last]</td> 
      <td><span style='color: #b20000'>&#10008;</span></td> 
     </tr> 
     </table>"; 
    } 

上面給出了我想要的確切信息。

我在哪裏卡住是...

我有對一個給定的團隊

一個match_part表中的所有球員名單team_members表(TmID是否,UID,TID)(MPID,中,UID ,可用性)以及已經輸入可用於特定比賽的球員的可用性。

我現在想展示那些還沒有給出他們可用性的人。因此,我需要顯示match_part表中不存在的team_members名稱。所以我只需要顯示team_members表中而不是match_part表中的玩家的名字。

因此,一些沿行...

$stmtU = $conn->prepare("SELECT user.first, user.last 
         FROM user 
         INNER JOIN team_members ON user.uid=team_members.uid 
         INNER JOIN match_part ON user.uid=match_part.uid 
         WHERE ***team_member.uid is not in match_part.uid***"); 
$stmtU->bindParam(':tid', $tid, PDO::PARAM_INT); 
$stmtN->bindParam(':mid', $row['mid'], PDO::PARAM_INT); 
$stmtU->execute(); 
    while($rowU = $stmtU->fetch(PDO::FETCH_ASSOC)) 
     { 
     echo "<table class='match-avail'>   
      <tr> 
      <td>$rowU[first] $rowU[last]</td> 
      <td>?</td> 
      </tr> 
     </table>"; 
     } 

對不起,冗長的職位,但我想通的信息可能有助於理解這裏的目的。感謝所有有任何想法/解決方案的人。非常感謝您的幫助!

回答

1

如果我理解正確的,你需要的是不是比賽的一部分 這樣做的team_members.uid你可以用子查詢

$stmtU = $conn->prepare("SELECT user.first, user.last 
          FROM user 
          INNER JOIN team_members ON user.uid=team_members.uid 
          where team_members.uid not in (select uid from match_part)"); 
+0

真棒不使用!這樣做,只需將WHERE添加到兩個部分,並得到我想要的。謝謝! – BL10s

+0

謝謝..在哪裏添加.. – scaisEdge

相關問題