所以在一个问题中=> How to fetch targeted results that are related in MYSQL?问了一个关于如何获取相关结果的问题,但我得到了一个答案,但此后我改变了格式。
对于我的项目,我有四个圆圈,将在他们的脸上显示一个数字,如下所示:
<div class="front" style="background: #4094ee;">
100
</div>
现在我想要使用这些数字,例如,其中一个数字需要显示用户被禁止的次数(行)。如果用户不存在于表中(从未被禁止),则返回数字0.
我得到了要显示的数字,但是它没有显示每个用户名的正确数字,它会一直显示表中的总行数,而不是存在行的情况下每个用户的行数< / p>
<?php
try {
$stmt = $db->prepare('SELECT player_data.uuid, banned_players.uuid FROM player_data, banned_players WHERE username = :username and player_data.uuid >= banned_players.uuid');
$stmt->execute(array(':username' => $_GET['name']));
} catch(PDOException $e){
//if an error is thrown a message will display
echo $e->getMessage();
exit();
}
?>
<?php if ($stmt->rowCount() <= 1 ): ?>
0
<?php else: ?>
<?php while(false !== ($row = $stmt->fetch(PDO::FETCH_ASSOC))): ?>
<?php endwhile; ?>
<?php endif; ?>
我需要使用的列是 从表
player_data:
-uuid
-username
banned_players:
-uuid(player_data needs to reference this for each player)
-permanent(if the player is banned permanently this will return 0 or 1)
-active(if the player's ban is active this will return 0 or 1)
如果可能的话,我想尽量避免修改数据库表,甚至根本不修改数据库表。
设置其余表的方式是每个用户都是由他们的UUID而不是他们的用户名引用的。我试图将这些表中的 UUID 与用户关联起来。
正如我之前提到的,我设法显示一个数字,但这不是我想要的数字。
所以这就是我拥有它的PHP非常混乱,我不知道如何解决它,对于我想要完成的事情,最好的解决方案是什么?
我也很抱歉,如果答案非常清楚明确,我对PHP不太满意,因为我还在学习。
答案 0 :(得分:0)
如果我理解正确您的UUID
列是播放器的唯一标识符(key
),那么两列中的值应该在此列上加入,如果这两列是的等于强>
鉴于这种理解,您的查询没有多大意义,因为您使用>=
进行比较,使其选择您想要的记录,但也选择您不想要的记录。它应该是:
SELECT player_data.uuid, banned_players.uuid
FROM player_data, banned_players
WHERE player_data.uuid = banned_players.uuid
AND player_data.username = :username
这也可以更明显地表达为:
SELECT player_data.uuid, banned_players.uuid
FROM player_data
JOIN banned_players ON (player_data.uuid = banned_players.uuid)
WHERE player_data.username = :username