Php 如何仅显示与另一个表中的值匹配的行

Php 如何仅显示与另一个表中的值匹配的行,php,html,mysql,Php,Html,Mysql,在这种情况下它是如何工作的?我甚至尝试过使用“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; 我运

在这种情况下它是如何工作的?我甚至尝试过使用“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的排行榜,这是一个奇迹(发现代码直接从另一个主题在这里),我的问题是不能使用加入功能,每个人都建议,以防止管理员的字符被列为以及

这是我现在在我的网站上的代码,它在一个表中显示排名1-30、字符名和级别

  • “订户”表包括帐户信息和管理员状态

    '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
    
  • 如果某个字符的sID值为订阅服务器ID,且admin值为Y,则不应列出该字符

    如果该字符的sID值为订阅服务器ID,admin值为N,则将列出该字符,并且该表将作为DESC列出,并且仅显示30行结果

    我该怎么做呢


    任何帮助都将不胜感激!这是我的第一篇帖子,所以关于未来帮助请求的提示也很好:)提前谢谢

    可以使用NOT IN子查询

    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;
    
    见下文

    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;
    

    非常感谢,这是我被建议的,但我不知道如何复制和工作!救生员!
    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;
    
    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;