Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выборка из БД по 2 таблицам с без повторов записей.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
gheka
Отправлено: 18 Ноября, 2012 - 17:09:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Здравствуйте есть запрос который выводит пользователей который находятся на сайте

Так вот есть 2 таблицы
USERS
Поля id, name, ip_input, date и т.д
и
SESSIONS
поля id, id_user, sid, start_time, last_time

Запрос
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. $t = "SELECT count(*) AS `count` FROM `" . DB_PREFIX . "users` JOIN `" . DB_PREFIX . "sessions` ON " . DB_PREFIX . "users.id=" . DB_PREFIX . "sessions.id_user";
  3.  
  4. $lines_count = mysql_query ( sprintf ( $t ) );
  5. $lines_count = mysql_result ( $lines_count, 0 );
  6.  


Запись в таблицу SESSIONS происходит при авторизации пользователя и если пользователь авторизуется повторно то с его id будет уже 2 записи
А запрос будет выводить уже 2 записи с его id
Подскажите что нужно дописать в запросе чтобы выводило только одну запись с одним id без повтора, ту запись у которого start_time больше.
 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 17:16:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




встречный вопрос
почему повторная авторизация инсертит вместо апдейта?
 
 Top
gheka
Отправлено: 18 Ноября, 2012 - 17:31:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




LIME пишет:
встречный вопрос
почему повторная авторизация инсертит вместо апдейта?

Вопрос правильный, У меня есть функция удаления старых сессии из БД у которых время простоя больше 20 минут. Правильно будет и на страницу авторизации дописать скрипт удаления предыдущей сессии. Это я пожалуй и сделаю но всё же хотел бы узнать и по выборке.

(Отредактировано автором: 18 Ноября, 2012 - 17:34:47)

 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 17:46:55
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




время хранения сессии по дефолту 20 мин
не надо ничего чистить
а при авторизации просто переписывать сид в таблице
и время писать не придется и более 1 юзера не зайдет под одной учеткой
и сложных запросов писать не надо
(Добавление)
сид писать в таблицу юзеров
и таблицу сессий выбросить

(Отредактировано автором: 18 Ноября, 2012 - 17:49:57)

 
 Top
gheka
Отправлено: 18 Ноября, 2012 - 18:03:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




LIME пишет:
время хранения сессии по дефолту 20 мин
не надо ничего чистить
а при авторизации просто переписывать сид в таблице
и время писать не придется и более 1 юзера не зайдет под одной учеткой
и сложных запросов писать не надо
(Добавление)
мид писать в таблицу юхнов
и таблицу сессий выбросить


Тут у меня не совсем так сделано я продумал так чтобы время сессии была настраиваемая, можно сделать и 20 минут и 40 и т.д для удобности. Так что время писать нужно и чистка в БД сессий нужна. Для Оптимизации базы данных.

Поводу обновления сессии за это спасибо, будет правильно сделать так, хотя и придётся дописать проверку на доступность сессии и если она есть в БД то обновить а если нет то записать новую.
Но опять же хочется узнать как сделать и выборку из БД без повторов на будущее чтобы потом не создавать новую тему.

(Отредактировано автором: 18 Ноября, 2012 - 18:06:53)

 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 18:18:37
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




время хранения сессии в htaccess настраивается
 
 Top
gheka
Отправлено: 18 Ноября, 2012 - 19:18:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




LIME пишет:
время хранения сессии в htaccess настраивается


Это да но как я уже писал запись вы базе данных нужна для получения информации кто находится сейчас на сайте,

поля
start_time время открытия сессии
last_time последнее время активности
Если время между start_time и last_time больше 20 минут ( или сколько я установлю ) то человек считается уже не онлайн, и сессия из базы удаляется.
По другому это не как не реализуешь.
 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 19:25:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




по другому?
легко
 
 Top
gheka
Отправлено: 18 Ноября, 2012 - 19:36:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




LIME пишет:
по другому?
легко


Давай реализуй Радость

Повторюсь потому что может ты не понял меня. Запись в базе времени и SID
Время - нужно для проверки кто сейчас на сайте
SID - это идентификатор текущей сессии и пользователя

(Отредактировано автором: 18 Ноября, 2012 - 19:37:48)

 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 19:41:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




все я понял
все реализуется в таблице юзеров
а ты подумай еще
 
 Top
gheka
Отправлено: 18 Ноября, 2012 - 19:56:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




LIME пишет:
все я понял
все реализуется в таблице юзеров
а ты подумай еще


И думать нечего, Нет функции в PHP чтобы реализовать - вытащить количество сессии.
Без использования записи в БД или в текстовый файл.
Единственное что я не правильно выразился в том что
start_time это нужно для определения начала сессии
а
last_time для отслеживания нахождения пользователя на сайте
Если реальное время и время в last_time будет различается в определенное время то есть в установленное мной то человек будет считаться уже не онлайн.

Реализовать запись в таблице USER будет не правильно так как это уже будет не логично впихивать ненужную информацию в в эту таблицу

(Отредактировано автором: 18 Ноября, 2012 - 20:00:11)

 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 20:00:01
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




верно
а что мешает для каждого юзеров писать время и сид прямо в таблицу юзеров
 
 Top
gheka
Отправлено: 18 Ноября, 2012 - 20:02:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




LIME пишет:
верно
а что мешает для каждого юзеров писать время и сид прямо в таблицу юзеров


Не мешает но это не логично и не правильно впихивать ненужную информацию в в эту таблицу.
Логичней и правильней будет это разместить в таблице SESSIONS
 
 Top
LIME
Отправлено: 18 Ноября, 2012 - 20:07:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ну как знаешь))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB