3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85

Выбирать из базы без повторов за сессию

22.05.2014, 22:04. Показов 1993. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, написал небольшой движок для проекта, но есть одна проблема... Зашедший пользователь, или авторизированный может рандомно пролистывать фото, что рандомно грузятся с помощью Аякса. Если использовать разные методы рандомной выборки средствами mysqli то результат ужасный, за раз может попасть одно и тоже фото 5 раз) При условии что фотографий 10. Как лучше сделать случайное фото без показов повторов, из тех которые на данный момент в базе (они могут увеличиться в любой момент) Вот как сейчас вытаскивается

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function action_load()
{
    include_once($_SERVER["DOCUMENT_ROOT"] . "/includes/db_connect.php");
 
 
    if ($stmt = $mysqli->prepare("SELECT url FROM files ORDER BY RAND() LIMIT 1")) {
        $stmt->execute();
        $stmt->bind_result($url);
        $stmt->fetch();
        $stmt->close();
    }
    $mysqli->close();
 
 
    echo 'хтмл часть с фоткой по адресу $url';
 
}
Как реализовать вывод без повторов? Дело в том, что всякие варианты с подобными рандомными запросами я перепробовал... Как бы это к сессии прикрепить... Но если много картинок в базе и это сколько же ее нужно гонять по кругу пока найдется не просмотренная... Подскажите как сделать и не нагружено и исключить повторы...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2014, 22:04
Ответы с готовыми решениями:

Выбирать из директории без повторов, если были выбраны все то заного начинать
Добрый день, я верстальщик, поэтому не ругайте ) В общем я делаю следующее... Есть страница на которой имеются табы, например TAB_1 и...

Перегнать данные из любого файла с разделителями в таблицу базы данных (без повторов)
Здравствуйте. В университете дали задание по sql. СУБД Oracle. Необходимо перегнать данные из любого файла с разделителями в таблицу...

Рандом без повторов
Как реализовать получение нового целого числа в диапазоне от 1 до 10 при нажатии на button1 без повторов? Помогите пожалуйста.

21
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 13:25
MySQL
1
... where `url` <> 'текущий' ORDER BY RAND()
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 14:50  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
MySQL
1
... where `url` <> 'текущий' ORDER BY RAND()
Ну это будет без повтора текущего. И вероятность того, что будет например из десяти показываться 5 7 5 7 5 7. Ведь под условие это попадает) А как бы реализовать исключение повторов за сессию? Если например сохранять в массив и хранить в сессии, а потом при выборке проверять есть ли такой урл в массиве и если есть рандомить заного... Мне кажеться, что так очень громозко и неправильно(

Добавлено через 43 минуты
Цитата Сообщение от crautcher Посмотреть сообщение
MySQL
1
... where `url` <> 'текущий' ORDER BY RAND()
Может как то так? Или гдето рядом?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// $urlView если не смотрели еще то определим переменную
if (unset($urlView)) {
$urlView = "";
}
else $urlView = $_SESSION['urlWiew']
 
// Здесть MySQLi рандомим url
 
 
if (in_array($url, $urlView)) {
// Если $url уже есть в массиве MySQLi рандомить заного url
}
 // Добавляем в массим урл и записваем в сессию
$urlView = array_unique($url);
$_SESSION['urlWiew'] = $urlView;
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 15:17
Цитата Сообщение от YozUP Посмотреть сообщение
И вероятность того, что будет например из десяти показываться 5 7 5 7 5 7. Ведь под условие это попадает
Это и значит случайность
Цитата Сообщение от YozUP Посмотреть сообщение
Если например сохранять в массив и хранить в сессии,
Лучше в куках браузера, зачем серверу держать у себя эти данные?
Цитата Сообщение от YozUP Посмотреть сообщение
грузятся с помощью Аякса
Ну так в джавскрипте храните уже просмотренные фото и отправляйте их обработчику.
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 15:34  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Это и значит случайность
Лучше в куках браузера, зачем серверу держать у себя эти данные?Ну так в джавскрипте храните уже просмотренные фото и отправляйте их обработчику.
А какой принцип если хранить в javascript? Тоесть сейчас так - user нажимае кнопку па onclick показать фото, идет запуск функции где аяксом идет отправка параметра "action=load" по xmlhttp.open на php файл, этот парамерт говорит в php файле о том, что нужно запустить выюорку из Mysqli... Что то крутиться на уме) Но не соображу) Дапустим массив просмотренных будет храниться в javascript и при обращении к php файлу фяксом передавать еще один парамерт о том какие просмотренные (массив) И выборку делать из любых, кроме тех которые просмотренные... И тут я запутался и каша в голове)))
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 15:45
Цитата Сообщение от YozUP Посмотреть сообщение
Дапустим массив просмотренных будет храниться в javascript и при обращении к php файлу фяксом передавать еще один парамерт о том какие просмотренные (массив) И выборку делать из любых, кроме тех которые просмотренные..
Ну в теории именно так
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 15:54  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Ну в теории именно так
В теории все законы для жителей страны))) А в реальности я в полуразваленом доме живу и плевать чиновники хотели) Вот ка бы эту теорию сконвертировать в практику) Если бы это был Бейсик, я бы в строке 50 сделал выборку из базы и если такой урл уже есть в массиве который пришел по POST я бы погнал GO TO 50 по кругу) Пока база бы не взорвалась) Вот как сделать эту проверку постоянно не гоняя базу?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 16:02
Цитата Сообщение от YozUP Посмотреть сообщение
Вот как сделать эту проверку постоянно не гоняя базу?
Так при 10 картинках, какая это нагрузка? А при 10000 шанс повтора 1 к 10000 и все это не нужно.
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 16:08  [ТС]
Просто хотелось не ограничиваться зависимостью количества. Да и так, для себя. Так как много до этого смотрел и заметил, что проблема яркая. То есть многие что только не вытворяют для рандома такого плана. Вот и стало интересно... Не ужели нет простого решения для подобных ситуаций?

Добавлено через 45 секунд
Цитата Сообщение от crautcher Посмотреть сообщение
Так при 10 картинках, какая это нагрузка? А при 10000 шанс повтора 1 к 10000 и все это не нужно.
Просто хотелось не ограничиваться зависимостью количества. Да и так, для себя. Так как много до этого смотрел и заметил, что проблема яркая. То есть многие что только не вытворяют для рандома такого плана. Вот и стало интересно... Не ужели нет простого решения для подобных ситуаций?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 16:15
Чтобы базу не гонять, можно выбрать максимальный айди, передать его в js (скажем 181). Js делает массив от 0 ... до 181. Выбирает случайный элемент - 77. Говорит пхп, что нужна пачка фоток вокруг 77. PHP выбирает данные где айди больше (или меньше) 77 и возвращает 5 фоток и их айди джаваскрипту. Js уничтожает в своем массиве айди использованные. Выбирает еще один случайный айди из массива...

Добавлено через 2 минуты
В общем идея немного сырая, только придумал, но смысл, чтобы js вел аналитику, а php доставал лишь нужное
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.05.2014, 16:20
Цитата Сообщение от crautcher Посмотреть сообщение
максимальный айди
имхо, не лучшая идея. Фотки могут удаляться, и может получиться так, что максимальный id, к примеру, 200, а картинок всего полтинник.. Проблематично будет. Лучше подсчитать число записей через COUNT(), а затем выводить с помощью LIMIT. Если ничего страшного не будет, если фотографии выводятся не 100% рандомно, а по порядку с рандомной позиции - то ничего сложного. Иначе идеи кроме как хранить, как минимум, все id-шники в памяти (в js или сессии/куки, файлы и т.п.) в голову не приходит..
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 16:24  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
имхо, не лучшая идея. Фотки могут удаляться, и может получиться так, что максимальный id, к примеру, 200, а картинок всего полтинник.. Проблематично будет. Лучше подсчитать число записей через COUNT(), а затем выводить с помощью LIMIT. Если ничего страшного не будет, если фотографии выводятся не 100% рандомно, а по порядку с рандомной позиции - то ничего сложного. Иначе идеи кроме как хранить, как минимум, все id-шники в памяти (в js или сессии/куки, файлы и т.п.) в голову не приходит..
Все правильно. Не подойдет... Фотки могут добавиться или удалиться другими пользователями в этот момент... И id поэтому не 1 2 3 4 5 а может быть так 5 7 8 33 47 121
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 16:30
Цитата Сообщение от KOPOJI Посмотреть сообщение
имхо, не лучшая идея. Фотки могут удаляться, и может получиться так, что максимальный id, к примеру, 200, а картинок всего полтинник..
И что?
MySQL
1
where id > '$x' limit 5
и плевать каких нет
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 16:33  [ТС]
Даже если сделать как говорит KOPOJI Вытащить все то можно конечно все их занести в массив перемешать shuffle и потом отдавать. Тоесть как только новый юзер пришел ему вписать (в js или сессии/куки, файлы и т.п.) этот массив число записей через COUNT()... А не так уже не пойдет через shuffle... Блин
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
23.05.2014, 16:41
Цитата Сообщение от KOPOJI Посмотреть сообщение
затем выводить с помощью LIMIT
И будут запросы
MySQL
1
.. limit 10000, 5
? Бред. По айди в разы меньше нагрузка.
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
23.05.2014, 17:19  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
И что?
MySQL
1
where id > '$x' limit 5
и плевать каких нет
Здесь я не совсем понимаю логику... Можно подробней? И почему лимит именно 5?
0
23.05.2014, 17:40

Не по теме:

Цитата Сообщение от YozUP Посмотреть сообщение
И почему лимит именно 5?
Это я не конкретно к вашему случаю, а просто пример какого-то лимита с большим сдвигом

0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
24.05.2014, 13:38  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение

Не по теме:


Это я не конкретно к вашему случаю, а просто пример какого-то лимита с большим сдвигом

В итоге как я понимаю нет однозначного решения на подобную тему( Я вот и до этого где только не смотрел... Проблема для подобных вещей частая и решения для одной задачи превращаются в "Битву") Как таковой простой фичи нет казалось бы для мелочи. В принципе все это я и думал, но надеялся на протопанные тропы) Я понимаю для каждой задачи свое решение, но ... Придется задуматься) И немного не в тему, вчера случайно наткнулся на толи как я понял блогера-учителя который продает курсы по питону) То что он, а он так гнал))) Там для тех кому он пытался продать свой курс тем кто только определяются с языком, привел такой факт, что python это единственный язык программирования на котором можно посчитать бюджет России) И только на питоне можно сделать портал) Потому что - Цитирую))) Пэшэпэ и сырой флэш для простых сайтов) И привел буквальный пример) Тут я и упал) Пример:
ппппппппппппппппппппппппппппппп (это любой язык не питон)
пппппп (Это питон!!!)
И после этого он прокричал в видео))) Видите разницу! И поэтому я вам советую питон))) Продолжив доказательства и показав в видео гугл) говоря - Гугл это мощь и гугл на питоне а там не дураки)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.05.2014, 13:59
Цитата Сообщение от YozUP Посмотреть сообщение
Пэшэпэ и сырой флэш для простых сайтов)
вы это пишете на "простом сайте", написанном на "пэшепэ"
Цитата Сообщение от YozUP Посмотреть сообщение
Это питон
всяк кулик свое болото хвалит Найдите рельсовика, он вам тоже самое скажет относительно RoR, а питон и пых опустит.
Цитата Сообщение от YozUP Посмотреть сообщение
гугл на питоне
Гугл не только на питоне - там используются C, C++, Go, Java, Python. Yahoo на пыхе. Википедия на пыхе. Ebay на яве. Github на RoR. Это не означает, что какой-то из этих языков лучше или хуже. У всех есть свои плюсы и минусы. Вопрос только в удобстве разработки, популярности и квалифицированности самого программиста в области конкретного языка
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
24.05.2014, 14:59  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
вы это пишете на "простом сайте", написанном на "пэшепэ"

всяк кулик свое болото хвалит Найдите рельсовика, он вам тоже самое скажет относительно RoR, а питон и пых опустит.

Гугл не только на питоне - там используются C, C++, Go, Java, Python. Yahoo на пыхе. Википедия на пыхе. Ebay на яве. Github на RoR. Это не означает, что какой-то из этих языков лучше или хуже. У всех есть свои плюсы и минусы. Вопрос только в удобстве разработки, популярности и квалифицированности самого программиста в области конкретного языка
Как ты буквально принял) А как же про то, что только на питоне можно посчитать бюджет России)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2014, 14:59
Помогаю со студенческими работами здесь

Выделения без повторов
Как выделить из таблицы game7 avatar но без повторов.

Рандом без повторов
Ребят подскажите как можно срандомить с числа 100 допустим 30 чисел которые не будут повторятся.

Вставка без повторов
Привет! Таблица: id | unique | status status default 0 - для тех которые были добавлены впервые. Как лучше сделать вставку...

Запрос на добавление без повторов
Доброго времени суток! База &quot;Периодические медицинские осмотры&quot; (ПМО) Согласно приказу, каждому вредному фактору соответствует определенный...

Добавление в файл без повторов
Есть некий файл 1.txt, необходимо добавить в него новую строчку, при условии того что такой строчки еще не было, помогите сделать плз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru