Проверить, был ли назначен случайный номер пользователю во временном интервале - PullRequest
0 голосов
/ 07 мая 2020

У меня есть группа веб-страниц с одним изображением на каждой. При нажатии на изображение домашней страницы происходит переход на следующую страницу по ссылке HTML, которая также регистрирует их IP-адрес и время (с использованием метки времени), по которому они щелкнули, в базе данных SQL. Каждое изображение помечено 1.jpg, 2.jpg, et c.

Я пытаюсь сделать его более случайным - поэтому вместо 2.jpg вторым, это rand (). Jpg - задано последние изображения редко просматриваются. Однако, будучи случайным, он также заставляет его повторяться; они в конечном итоге показывают одни страницы несколько раз, а другие - нет. Я пробовал сравнивать случайное число с другими случайными числами в базе данных (согласно другим вопросам Stackoverflow), чтобы убедиться, что оно уникально, но это означает, что один пользователь просматривает больше, чем другой. Это также означает, что как только пользователи увидят каждое изображение, мне нужно усечь таблицу, иначе она не выдаст больше чисел.

1) Соберите IP-адрес и сгенерируйте случайное число.

2) Проверьте «маркеры» базы данных и выберите все записи с этим IP-адресом пользователя за последний час.

3) Проверьте этот массив, чтобы увидеть, есть ли там случайное число.

4)

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$r = (rand(1,12))

// $ip = $_SERVER['REMOTE_ADDR'];
require_once('../includes/ran.php');
$result = $conn->prepare("SELECT ip, entrytime, random FROM markers WHERE entrytime>= NOW()- INTERVAL 1 HOUR AND ip LIKE '".$ip."%'");
$result->execute();
// for($i=0; $row = $result->fetch(); $i++){

=====what goes here =======
}

1 Ответ

0 голосов
/ 07 мая 2020

Конечно, если вы хотите показывать пользователю одно случайно выбранное изображение при каждом щелчке, вы можете сделать что-то вроде

      SELECT imagename FROM images ORDER BY RAND() LIMIT 1;

, чтобы изображение отображалось. Но это печально известный плохоэффективный способ получить случайный элемент.

Вы можете добавить столбец в свою таблицу изображений

      DOUBLE random_choice;

Затем, когда вы вставляете данные в таблицу, установите random_choice на RAND().

 INSERT INTO images (whatever, whatever, random_choice)
             VALUES (??, ??, RAND();

Затем, выбирая случайное изображение, вы делаете

  SELECT imagename FROM images WHERE random_choice <= RAND() LIMIT 1;

Это способ, которым Википедия реализует «показать мне случайную статью». Чтобы сделать это эффективным, вам понадобится индекс на random_choice.

. Если вы никогда не должны показывать одно и то же изображение одному и тому же пользователю дважды, пока этот пользователь не просмотрит все изображения, это много проблему сложнее решить, особенно если у вас увеличивается количество пользователей. Сможете ли вы уклониться от этого требования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...