那么在一个问题中=>如何获取MYSQL中相关的目标结果?当被问到如何获取相关结果的问题时,我得到了答案,但后来我更改了格式。
对于我的项目,我有四个圆圈,它们的脸上会显示一个数字,如下所示:
<div class="front" style="background: #4094ee;">
100
</div>
现在我想使用这些数字,例如,其中一个数字需要显示用户被禁止的次数(行)。如果该用户不在表中(从未被禁止),则返回数字0。
我得到了要显示的数字,但它没有显示每个用户名的正确数字,它一直显示表中的行总数,而不是每个用户的行数(如果存在的行)
<?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不是很好,因为我还在学习。
如果我理解正确,您的UUID
列是玩家的唯一标识符(key
),因此在两列相等的情况下,两个表中的值应该是该列的JOINed。
考虑到这种理解,查询没有什么意义,因为您使用>=
进行比较,使其选择您想要的记录,也选择您不想要的记录。应该是:
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