выборка пользователя по его"статусу"

Winer

Мимо проходил
выборка пользователя по его"статусу"

Есть таблица содержащая два поля - имя пользователя и его "статус". На каждого пользователя в таблице может быть несколько записей. Поле статус может принимать любое из трёх определённых значений(в нескольких записях для каждого пользователя могут быть разные значения "статуса"). Необходимо выбрать пользователей, у которых поле "статус" содержит только одно из значений, и не содержит остальных. Например
Пользователь Статус
Вася Пупкин 0
Вася Пупкин 1
Иван Петров 0
Иван Петров 0

В этом случае подходит только Иван Петров.

Подскажите пожалуйста как это сделать.
Заранее спасибо.
 

Dallas

Guest
select distinct pole2 where pole1='name'; - если больше одной записи, то не подходит
 

Winer

Мимо проходил
ну вот, опять я неточно сформулировал, сорри. Нужно выбрать пользователей, у которых поле "статус" содержит только одно из значений, но не любое, а например 0. Если оно содержит только единицы, то этот пользователь не подходит.
 

Kirs

Fireman
Какя понял, тебе надо это поле сделать или типом SET, или выбору производить конструкцией WHERE x IN ('y', 'z' ...)
 

Кром

Новичок
Winer
Ты лучше переделай базу, пока не поздно. В поле пользователь храни одну запись для каждого пользователя. А в статусе для каждого пользователя побитовые комбинации трех значений: 1, 2 и 4.
Выборку будет делать эементарно.

-~{}~ 13.08.04 22:37:

А хотя у тебя статус 0 повторяется. Это зачем?
 

neko

tеam neko
Кром
наверное тезка и однофамилец с таким же статусом
 

Winer

Мимо проходил
Кром
это статистическая информация по пользователям(например по дням). Сегодня у него статус 0, завтра 1 и т.п. Т.е. нужен пользователь у которого за определённый период статус не менялся.
 

Кром

Новичок
>Т.е. нужен пользователь у которого за определённый период статус не менялся.

Это очень интересно. А как ты определяешь временной период, если у тебя в таблице всего два столбца?
 

Winer

Мимо проходил
их не 2, их больше, и не только дата. Я посчитал что к решению данной проблемы выборка по дате не имеет отношения. Но если нужно, могу привести структуру таблицы и описать задачу ещё более конкретно.
 

Кром

Новичок
>Но если нужно, могу привести структуру таблицы и описать задачу ещё более конкретно.

Ага.
 

Winer

Мимо проходил
Хорошо :)
структура:
nick_name varchar(50) NOT NULL default '',//ник игрока
rating int(10) unsigned NOT NULL default '0',//абсолютное значение рейтинга
relative_rating int(11) NOT NULL default '0',//изменение рейтинга относительно предыдущего по времени значения
status tinyint(3) NOT NULL default '0',//статус рейтинга, уменьшался, не изменялся, увеличивался
date_add date NOT NULL default '0000-00-00',//дата добавления записи
time_add time NOT NULL default '00:00:00'//время добавления записи

Задача:
Существует ежедневно обновляемый рейтинг игроков "игрушки".
Перед каждым обновлением рейтинга, предыдущий сохраняеться в отдельную таблицу, т.е. ведётся статистика по игрокам(изменение рейтинга). Необходимо найти таких игроков, у которых рейтинг за определённый промежуток времени только уменьшался(т.е. "статус"=-1).

Так лучше(понятне) ???

-~{}~ 14.08.04 01:08:

в общем-то я нашёл как можно сделать - через HAVING(AVG(status)=определённое значение), но я думаю что есть намного более лучшее решение.
 

Кром

Новичок
Тебе нужно разделить все на две таблицы.
В одной:
id
nick_name varchar(50) NOT NULL default '',//ник игрока
rating int(10) unsigned NOT NULL default '0',//абсолютное значение рейтинга
status tinyint(3) NOT NULL default '0',//статус рейтинга, уменьшался, не изменялся, увеличивался

Во второй:
id - id записи
uid - id пользователя
relative_rating int(11) NOT NULL default '0',//изменение рейтинга относительно предыдущего по времени значения
date_add date NOT NULL default '0000-00-00',//дата добавления записи
time_add time NOT NULL default '00:00:00'//время добавления записи

При изменении рейтинга в таблицу 2 добавлять запись.
Если нужно время всех записей, то просто добавлять запись. Если интересует только рейтинг за день, то делать update записи пользователя за текущий день.

Дальше, при выводе статистике делать выборку из таблицы 2, посчитывать статус пользователя за день, после чего обновлять таблицу1 (rating int). Причем в зависимости от набраных очков изменять relative_rating.
 

Dallas

Guest
Можно узнать под какую игрушку статы делаются? Не КС случаем? Я когда-то делал... если да, то интересно было бы обсудить алгоритм обсчета статов.

-~{}~ 14.08.04 01:29:

Тьфу ты, логов, а не статов... поздно...
 

Winer

Мимо проходил
Кром
спасибо, только я пошёл совсем другим путём
 
Сверху