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

时间:2016-04-26 06:13:47

标签: 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;

我运行一个游戏服务器,在网站上我有一个Top 30排行榜,它正在创造奇迹(在这里直接找到了另一个主题的代码),我遇到的问题是无法使用JOIN每个人都建议的功能,以防止管理员的角色被列出。

这是我现在在我网站上的代码,它显示了排名编号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. &#39;字符&#39;表包含字符信息

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

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

    如果角色的sID值为具有管理员值N的订户ID,则会列出该值并将该表列为DESC并仅显示30行结果。

    我将如何做到这一点?

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

2 个答案:

答案 0 :(得分:1)

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 :(得分:0)

您可以使用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;