Итак, в вопросе => Как получить целевые результаты, связанные с 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