如何仅显示与其他表中的值匹配的行

问题描述:

它如何在类似的情况下工作?我甚至尝试使用“AND tb1.name!=”,但它没有奏效。如何仅显示与其他表中的值匹配的行

$area = 0; 
$stmt = $dbh->prepare('SELECT * FROM charinfo WHERE current_area != :area ORDER BY current_area'); 
$stmt->execute(array('area' => $area)); 
$result = $stmt->fetchAll(); 
$place = 1; 

我运行一个游戏服务器,并在网站上我有一个30强排行榜这是工作的奇迹(代码直接找到在这里下车另一个话题),我有没有能够使用的问题每个人都在建议的JOIN功能,以防止ADMIN的角色被列出。

下面是我现在在我的网站上的代码,它显示了职级编号1-30,角色名称和表中的级别。 Here's it working on my website

<?php 
require("srvcs/config.php"); 
$stmt = $dbh->prepare('SELECT * FROM chars ORDER BY CAST(experience AS UNSIGNED) DESC LIMIT 30;'); 
$stmt->execute(); 
$result = $stmt->fetchAll(); 
$place = 1; 

echo '<table class="justShowme" style="width:600px;height:150px;"> 

         <tr> 
          <td>Rank</td> 
          <td>Character Name</td> 
          <td>Level</td> 
          </tr>'; 

    foreach ($result as $index => &$item) { 

     $exp = floor(pow($item['experience'] + 1, 1/4)); 
     $name = $item['name']; 

     echo '<tr>'; 
     echo "<td><B>" . $place++ . "</B></td>"; 
     echo "<td>" . $name . "</td>"; 
     echo "<td>" . $exp . "</td>"; 
     echo '</tr>'; 
    } 
    echo '</table></center>'; 
?> 

我不是很熟悉的MySQL,所以我就列出各种我所知道的是必要的启动...

  1. “字符”表中包含的字符信息

    'sID' column is unique and matches the subscriber 'ID' column, whoever owns the character 
    
  2. '订户' 表包括帐户信息和管理员状态

    'ID' is the subscriber ID which the 'sID' from chars table refers to 
    'admin' is the admin status of the account as Y or N 
    

如果一个字符的管理员值为Y的用户ID的sID值不应列出。

如果该字符的管理员值为N的用户ID的sID值将被列出,并且该表列出为DESC,并且仅显示30行结果。

我该怎么做呢?

任何帮助将不胜感激!这是我的第一篇文章,所以未来的帮助请求的提示也不错:)提前谢谢!

SELECT tb1.* 
    FROM chars tb1 
    JOIN subscriber tb2 
    ON tb1.sID=tb2.ID 
    WHERE admin = 'N' 
    ORDER BY CAST(experience AS UNSIGNED) DESC 
    LIMIT 30; 
+1

非常感谢你,这正是我所建议的,但不知道如何复制和工作!拯救生命! –

您可以使用NOT IN子查询。

见下文。

SELECT chars.* 
FROM chars 
WHERE sID NOT IN (SELECT ID FROM subscriber WHERE subscriber.admin = 'Y') 
ORDER BY CAST(experience AS UNSIGNED) DESC 
LIMIT 30; 
+0

这也行得通,谢谢! –