Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.01.2011, 19:09
VadimuZ вне форума Посмотреть профиль Отправить личное сообщение для VadimuZ Найти все сообщения от VadimuZ
  № 1  
Ответить с цитированием
VadimuZ
 
Аватар для VadimuZ

Регистрация: Sep 2004
Сообщений: 129
Отправить сообщение для VadimuZ с помощью ICQ
Attention Запросы с исключением

Есть таблица юзеров as U (в таблице 2 миллиона записей)
Есть запрос который выводи в произвольном порядке 100 записей из таблицы юзеров, для конкретно выбранного юзера (U.id).
Нужно запомнить что что для выбранного юзера U.id мы уже показывали вот этих 100 рендомных юзеров, и как исключение при следующих запросах их не отображать.

Стандартный вариант, завести еще одну таблицу as D и туда сувать, тех кто попал под рендом и кому этот рендом отобразился, но как строить запрос с исключением? and U.id != D.uid and ...

Либо завести еще одно поле в таблице U.lockField (text) и туда для конкретно выбранного плюсовать чрез разделитель id тех кого уже отобразили, а потом делать выборку с исключением через like но тогда не будут фурыкать индексы, и база будет очень разростаться при большем количестве запросов.

Как лучше реализовать подобное?
__________________
www.vadimuz.ru


Последний раз редактировалось VadimuZ; 05.01.2011 в 22:08.
Старый 05.01.2011, 20:35
membrilius вне форума Посмотреть профиль Отправить личное сообщение для membrilius Найти все сообщения от membrilius
  № 2  
Ответить с цитированием
membrilius
 
Аватар для membrilius

Регистрация: Aug 2008
Сообщений: 258
Это смотря какие задачи стоят.
Больше никогда в жизни не отображать уже показанные ID или успокоиться на текущей сессии

Старый 05.01.2011, 21:38
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 3  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
А что за база? Копайте в сторону подзапросов
Код:
SELECT * FROM table_1 WHERE id NOT IN(SELECT id FROM table_2)
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 05.01.2011, 22:05
VadimuZ вне форума Посмотреть профиль Отправить личное сообщение для VadimuZ Найти все сообщения от VadimuZ
  № 4  
Ответить с цитированием
VadimuZ
 
Аватар для VadimuZ

Регистрация: Sep 2004
Сообщений: 129
Отправить сообщение для VadimuZ с помощью ICQ
База на postgreSQL.

membrilius Да никогда в жизни...
Может за исключением если записи в таблице "закончатся" которые еще не отображались, тогда всё очистить и начать заново. В реале это все равно где-то хранить и выбирать надо...

leofit Спасибо, возьму на заметку как вариант...
__________________
www.vadimuz.ru

Старый 05.01.2011, 23:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
А смысл в исключении?

Старый 06.01.2011, 02:47
VadimuZ вне форума Посмотреть профиль Отправить личное сообщение для VadimuZ Найти все сообщения от VadimuZ
  № 6  
Ответить с цитированием
VadimuZ
 
Аватар для VadimuZ

Регистрация: Sep 2004
Сообщений: 129
Отправить сообщение для VadimuZ с помощью ICQ
Смысл в не повторяться. Работая при этом с большим количеством данных.
__________________
www.vadimuz.ru


Последний раз редактировалось VadimuZ; 06.01.2011 в 02:51.
Старый 06.01.2011, 17:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Раз данных много, а выборка небольшая, вероятность повторения не очень высока. Лично я бы не стал заморачиваться в угоду производительности. Конечный пользователь не особо-то и заметит повторения.

Старый 06.01.2011, 20:13
membrilius вне форума Посмотреть профиль Отправить личное сообщение для membrilius Найти все сообщения от membrilius
  № 8  
Ответить с цитированием
membrilius
 
Аватар для membrilius

Регистрация: Aug 2008
Сообщений: 258
Конечно хранить в базе для каждого юзера 1 999 999 потенциальных IDшников и при выборки ещё в них рыться, это жесть.

Можно подумать, над псевдо-"псевдо случайной" выборкой. Выбирайте не просто хаотично разбросанные 100 юзеров по таблице из 2млн полей, а интервал. Допустим:
Код:
WHERE UID > '4000' ORDER BY UID ASC LIMIT 100
Можно дополнять любыми условиями.
Потом смотрите ID последней записи и пишите в базу просмотренный интервал. Более мы его не используем. Минусы только что записи идут по порядку. Если юзер будет удалён из базы, то интервал немного съедет по-этому надо сделать доп. поле delete и выбирать с учетом его. И для интервалов должны быть жесткие условия.

Интервалы можно объединять для экономии места.

Старый 06.01.2011, 20:48
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Может глупое решение, но брать "начальное число" случайным. Например, 63. И выводить юзеров с идами 63-163.

Старый 07.01.2011, 15:41
VadimuZ вне форума Посмотреть профиль Отправить личное сообщение для VadimuZ Найти все сообщения от VadimuZ
  № 10  
Ответить с цитированием
VadimuZ
 
Аватар для VadimuZ

Регистрация: Sep 2004
Сообщений: 129
Отправить сообщение для VadimuZ с помощью ICQ
membrilius да тема =) это пока наилучший вариант... может получится обойтись без рендома...

Psycho Tiger В идеи что-то есть... но не подойдет потому как при выборке еще куча условий...

Всем спасибо!
__________________
www.vadimuz.ru

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.