У меня 2 стола. Мне нужно выполнить эту работу, потому что я начинаю открывать бесплатный сервис для своей игры. Я надеюсь, что люди могут помочь.
Таблица 1 "онлайн"
|ID |
---
| 1 |
| 2 |
| 3 |
| 12|
| 55|
Таблица 2 «Пользователь»
UserID| IP
------------------------
1 | 123.123.123.123
2 | 123.123.123.123
3 | 123.123.123.123
12 | 123.123.123.123
55 | 22.12.122.22
Первый. Я получаю значение (ID) из таблицы "онлайн". Чтобы получить удостоверение личности.
У меня есть ID одного пользователя в сети.
Следующий. Я использую значение (ID), которое я получил из интерактивной таблицы, чтобы выбрать IP-адрес из таблицы «Пользователь».
Когда я получил IP от одного пользователя в сети. Я получаю UserID из таблицы «User», у которой такой же «IPAddress». Он покажет множество пользователей с одинаковым IP-адресом.
Мой вопрос. Как я могу сделать запрос (мой бонусный запрос) только для 3 идентификаторов онлайн из таблицы «онлайн», если так много пользователей имеют одинаковый IP-адрес и онлайн.
Версия MYSQL не поддерживает select top. Так что я не мог выполнять эту работу. Пожалуйста помоги.
Спасибо вам всем!
<?php
session_start();
header('Content-Type: text/html; charset=utf-8');
include ("config.php");
error_reporting(0);
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "data";
$account_Name = $_SESSION['userlogin'];
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// get id online
$id_online = $conn->query("select ID from online");
$online = "";
while($row = $id_online->fetch_assoc())
{
// list account online
$online = $row["ID"];
echo "- ID online: $online";
echo "</br>";
$id_basetab = $conn->query("select UserID, IP from User where UserID='$online'");
$ip = "";
//show same ip list
while($list = $id_basetab->fetch_assoc())
{
$ip = $list["LastIP"];
echo "<hr>- IP: $ip</br>";
$queryIP = $conn->query("SELECT UserID, IP FROM User where IP=$ip");
echo "<hr>";
//echo " acc Clone: </br>";
while($row1 = $queryIP->fetch_assoc())
{
//echo "id: " . $row1["AccountID"]. " - Name: " . $row1["name"]. " - IP: " . $row1["LastIP"]. "<br>";
}
}
// join table
echo "<hr>";
$queryshow = $conn->query("select UserID, IP from online FULL JOIN User ON UserID=ID where UserID=$online ");
while($result = $queryshow->fetch_assoc())
{
// is my $queryshow correct? I want to get value ID is exist or not if exist UserID on User table.
// How can I create a query for only 3 users online if they have multiple account online.
//I will make my custom query here.
}
}
?>Поскольку вы используете mysqli, почему бы не улучшить вашу безопасность с помощью подготовленные заявления.
Спасибо, я хочу выбрать 3 лучших идентификатора в сети, если в сети так много идентификаторов пользователей (пример: идентификаторы 1, 2, 3, 12 имеют одинаковый IP-адрес). Я запрошу запрос, чтобы получить бонус для ID 1, 2, 3. Но моя версия MYSQL не поддерживает select top.
@ Script47 Я просто запускаю его для себя. Пользователи этого не увидят
Но что вы имеете в виду под топ-3 ID онлайн? Что определяет вершина?
@ Script47 Каждый человек создал несколько учетных записей. И войдите в мультиаккаунт. Сверху только 3 аккаунта онлайн, если у них одинаковый IP. В таблице пользователей так много идентификаторов пользователей, и некоторые из них находятся в сети.
почему так много запросов делают эту простую задачу? вы можете использовать лимит
@jonny Я не очень разбираюсь в PHP. Не могли бы вы помочь мне ответить. Спасибо
Как вы проверяете, есть ли кто-нибудь в сети? Потому что вы, по сути, получаете все идентификаторы с первым запросом. Вы получаете идентификатор при входе в систему? Я не уверен, что выбор всех идентификаторов эффективен, возможно, выберите тот, который вы ищете
«топ-3» все еще немного неясен. Топ-3 по сравнению с последними действиями, временем выхода из системы или только периодом первых 3 результатов?
это сравнивается с IP-адресом. IP - это последний IP-адрес входа






Этот запрос должен получить данные, которые вам нужны за один раз. Теперь вы можете реструктурировать и повторить результаты в HTML и php один раз. Это сократит объем кода. Я использовал внутреннее соединение и получил сразу данные обеих таблиц. Если вам нужно предложение where, просто поместите его между внутренним соединением и порядком по разделам этого кода. LIMIT 3 показывает 3 лучших результата в наборе данных.
SELECT User.UserID, User.IP, online.ID
FROM User
INNER JOIN online ON User.UserID = online.ID
ORDER BY User.IP DESC limit 3
Как бы вы выбрали, какие три идентификатора вам нужны?