Присоединитесь к таблице и получите значение из таблицы, если значение в этой таблице существует в другой таблице

У меня 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.
		
		}
}


?>

Как бы вы выбрали, какие три идентификатора вам нужны?

Script47 10.04.2018 17:00

Поскольку вы используете mysqli, почему бы не улучшить вашу безопасность с помощью подготовленные заявления.

Script47 10.04.2018 17:03

Спасибо, я хочу выбрать 3 лучших идентификатора в сети, если в сети так много идентификаторов пользователей (пример: идентификаторы 1, 2, 3, 12 имеют одинаковый IP-адрес). Я запрошу запрос, чтобы получить бонус для ID 1, 2, 3. Но моя версия MYSQL не поддерживает select top.

sycoi001 10.04.2018 17:05

@ Script47 Я просто запускаю его для себя. Пользователи этого не увидят

sycoi001 10.04.2018 17:06

Но что вы имеете в виду под топ-3 ID онлайн? Что определяет вершина?

Script47 10.04.2018 17:07
Я просто использую это для себя. Пользователи этого не увидят - ¯_ (ツ) _ / ¯
Script47 10.04.2018 17:10

@ Script47 Каждый человек создал несколько учетных записей. И войдите в мультиаккаунт. Сверху только 3 аккаунта онлайн, если у них одинаковый IP. В таблице пользователей так много идентификаторов пользователей, и некоторые из них находятся в сети.

sycoi001 10.04.2018 17:10

почему так много запросов делают эту простую задачу? вы можете использовать лимит

Jonny 10.04.2018 17:28

@jonny Я не очень разбираюсь в PHP. Не могли бы вы помочь мне ответить. Спасибо

sycoi001 10.04.2018 17:36

Как вы проверяете, есть ли кто-нибудь в сети? Потому что вы, по сути, получаете все идентификаторы с первым запросом. Вы получаете идентификатор при входе в систему? Я не уверен, что выбор всех идентификаторов эффективен, возможно, выберите тот, который вы ищете

Jonny 10.04.2018 17:48

«топ-3» все еще немного неясен. Топ-3 по сравнению с последними действиями, временем выхода из системы или только периодом первых 3 результатов?

Jonny 10.04.2018 17:52

это сравнивается с IP-адресом. IP - это последний IP-адрес входа

sycoi001 10.04.2018 18:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
12
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот запрос должен получить данные, которые вам нужны за один раз. Теперь вы можете реструктурировать и повторить результаты в 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

Другие вопросы по теме