Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Последний правильный вариант, mysql запрос
asstral  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 116
Пользователь №: 38066
На форуме: 3 года, 9 месяцев, 21 день
Карма: 3




Добрый день ребята!
Не могу составить запрос.
Есть пользователи они могут заходить и выходить в группы. Примерно как в вк.
В таблички я сохраняю их действия, виду историю.

user posted image

Что мы имеем, последние записи говорят нам, что пользователь с номером 22 зашёл в группу 8 (project_id) (access=2) вышел (access=4) и опять зашёл (access=2). Но он может выйти и значит, что последнее действие (access=4) и он не состоит в группе.

Собственно, как мне узнать по запросу, какие номера пользователей в группе 8(project_id=8 зашли и не выходили или выходили но последнее действие был вход?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6268
Пользователь №: 5552
На форуме: 8 лет, 11 месяцев, 17 дней
Карма: 164




Может легче перенести/оставить историю в отдельной таблице, а актуальную группу хранить при пользователе (в таблице где данные пользователь записаны)?


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1568
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 25 дней
Карма: 98




SELECT 
ass.access, ass.user_id
FROM
(
SELECT
id, access, user_id
FROM
`ass_project_user`
WHERE
`project_id` = 8
GROUP BY
user_id,
id DESC
) AS ass
WHERE
ass.access != 4
Но что-то меня берут сомнения.
вот был бы дамп, тогда запрос будет рабочий.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1568
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 25 дней
Карма: 98




waldicom
только нужна отдельная таблица, в которой будет группа/пользователь/статус
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
asstral  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 116
Пользователь №: 38066
На форуме: 3 года, 9 месяцев, 21 день
Карма: 3




waldicom, Kusss да, так можно, но это последний вариант.

Kusss немного отредактировал, возможно это имелось в виду:

SELECT 
ass_project_users.access, ass_project_users.user_id
FROM
(
SELECT
id, access, user_id
FROM
`ass_project_user`
WHERE
`project_id` = 8
GROUP BY
user_id,
id DESC
) AS ass_project_users
WHERE
ass_project_users.access != 4


Но выводятся несколько раз один и тот же к примеру пользователь 22, который несколько раз заходил и выходил.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1568
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 25 дней
Карма: 98




SELECT 
ass_project_users.access, ass_project_users.user_id
FROM
(
SELECT
id, access, user_id
FROM
`ass_project_user`
WHERE
`project_id` = 8
GROUP BY
user_id
ORDER BY
id DESC
) AS ass_project_users
WHERE
ass_project_users.access != 4
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1568
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 25 дней
Карма: 98




в подзапросе выбираем последнюю запись каждого пользователя.
в следующем убираем из неё отписавшихся.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
asstral  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 116
Пользователь №: 38066
На форуме: 3 года, 9 месяцев, 21 день
Карма: 3




Kusss, почему-то пользователь с id 1 вообще пропадает и никаких действий.
Другие пользователи выводятся, но не реагирует на выход.

Решено, но через костыль с php

$qq='SELECT * FROM ass_project_user WHERE project_id=8 GROUP BY user_id';
$rres = mysql_query($qq);
$n=0;
while ($ss = mysql_fetch_array($rres)){
$n++;
$qqq = 'SELECT * FROM ass_project_user WHERE user_id = '.$ss['user_id'].' AND project_id=8 ORDER BY id DESC LIMIT 1';

$rrres = mysql_query($qqq);
if ($sss = mysql_fetch_array($rrres)){

if ($sss['access'] == 2) {
$this->bb_user($ss['user_id']); // ВЫВОДИМ ПОЛЬЗОВАТЕЛЯ
}
}
}


Посредством php получилось.
А можно объеденить эти два запроса в один?
1. SELECT * FROM ass_project_user WHERE project_id=8 GROUP BY user_id
я ищу уникальных пользователей (user_id) принадлежащие группе (project_id)
2. SELECT * FROM ass_project_user WHERE user_id = '.$ss['user_id'].' AND project_id=8 ORDER BY id DESC LIMIT 1
нахожу последние действие пользователя.
3. Если последние действие (access=2) был вход, то вывожу.

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26421
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 10 дней
Карма: 739




Цитата
while ($ss = mysql_fetch_array($rres)){
    $n++;
    $qqq = 'SELECT * FROM ass_project_user WHERE user_id = '.$ss['user_id'].' AND project_id=8 ORDER BY id DESC LIMIT 1';

бля**, есть контакт.



--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1568
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 25 дней
Карма: 98




Цитата (asstral @ 24.04.2017 - 15:04)
почему-то пользователь с id 1 вообще пропадает и никаких действий.

потому что пользователь 1 отписался в строке id = 10

мой запрос должен был выводить всех пользователей подписанных на "группу".
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6268
Пользователь №: 5552
На форуме: 8 лет, 11 месяцев, 17 дней
Карма: 164




Цитата (Kusss @ 24.04.2017 - 10:40)
только нужна отдельная таблица, в которой будет группа/пользователь/статус

эммм...
Цитата (waldicom @ 24.04.2017 - 10:33)
историю в отдельной таблице


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
asstral  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 116
Пользователь №: 38066
На форуме: 3 года, 9 месяцев, 21 день
Карма: 3




Kusss
Я немного поменял действия 1-го пользователя. теперь последние по id - это access = 2, что значит, что пользователь в группе.

user posted image

Но Ваш запрос, его не видит.

user posted image

SELECT ass_project_user.id, ass_project_user.access, ass_project_user.user_id
FROM (

SELECT id, access, user_id
FROM `ass_project_user`
WHERE `project_id` =8
GROUP BY user_id
ORDER BY id DESC
) AS ass_project_user
WHERE ass_project_user.access =2


Мне не очень нравятся id, он должен отталкиваться по последним, а не первым.
после WHERE ass_project_user.access =2 ORDER BY id DESC не помогает
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3691
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 27 дней
Карма: 195




asstral
Ты делаешь плохо. Очень плохо!!! Не делай так никогда.
waldicom тебе уже сказал, как будет правильно.
Цитата
Может легче перенести/оставить историю в отдельной таблице, а актуальную группу хранить при пользователе (в таблице где данные пользователь записаны)?


В независимости от того, таблица ли это или функция, или класс, все должно быть предназначенно для одной и только одной вещи/действия/сущности.
Иначе у тебя будет бардак, неразбериха, баги и проклятья от других разработчиков :)

Итак, у тебя есть:
- пользователи
- группы
- лог

Вот и делай три таблицы:
- user
- group
- logs

ну, и связи между ними
- user_group

Юзер зашел в группу, ты создал соответсвующую запись в user_group
Юзер вышел из группы, ты удалил соответсвующую запись из user_group
Паралельно кидаешь evets в таблицу logs

И тогда твой запрос на тему
Цитата
Собственно, как мне узнать по запросу, какие номера пользователей в группе 8(project_id=8 зашли и не выходили или выходили но последнее действие был вход?
превращается в элегантное
select * from user 
left join user_group on (user.id = user_group.user_id)
where user_grouр.group_id = 8


Нужна статистика? Читай таблицу logs

А при твоей нынешней структуре, я присяду на недельку и буду 26 часов в сутки входить/выходить в/из группу.
У тебя твоя таблица распухнет и твой запрос с каждым днем будет все медленнее и медленнее. И однажды скрипт просто по таймауту умрет.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
asstral  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 116
Пользователь №: 38066
На форуме: 3 года, 9 месяцев, 21 день
Карма: 3




AllesKlar
Спасибо всем за помощь!
Создам отдельную таблицу, и гемора будет меньше.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса