За последние 24 часа нас посетили 39128 программистов и 1278 роботов. Сейчас ищут 1019 программистов ...

Как сделать выборку по user_id и его последней записи?

Тема в разделе "MySQL", создана пользователем phpjunior, 23 янв 2014.

  1. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Есть таблица с такой архитектурой
    ---------------------------------------------------------------
    ID USER_ID COUNT READ DATETIME
    ---------------------------------------------------------------
    1 2 значение значение 0101012014
    ---------------------------------------------------------------
    2 2 значение значение 0101012014
    ---------------------------------------------------------------
    Как сделать выборку по последней записи определённого user_id и внести в неё значение read

    Тоесть внести значение в поле read последней записи если user_id=2
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    пара (user_id, datetime) уникальна?
    если нет, то нет решения
    если да, то сначала находишь max(datetime) для данного пользователя, затем по (user_id, datetime) выбираешь любые другие поля

    читай доки по group by
     
  3. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    user id не уникален в таблице он может повторяться !!
    пример
    Для пользователя была сделана email рассылка и данные о ней отправились в таблицу
    отправились значения count user_id datetime и id (auto increment)
    именно в эту строку в поле read должны update +1 значение при каждом открытии письма
     
  4. retvizan

    retvizan Активный пользователь

    С нами с:
    27 дек 2013
    Сообщения:
    68
    Симпатии:
    22
    Два варианта:
    1. Двумя запросами: сначала найти id, затем update по найденному id
    2. Одним запросом: многотабличный update, где во вспомогательной таблице определяется нужный id.

    Как найти id? Есть как минимум 5 способов, смотри статью Группировка в MySQL. Там практически твой пример разобран.
     
  5. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    update в последнюю добавленную c user_id = какое либо значение
    Спасибо за ссылку )) skill +5
     
  6. retvizan

    retvizan Активный пользователь

    С нами с:
    27 дек 2013
    Сообщения:
    68
    Симпатии:
    22
    для фиксированного пользователя будет достаточно ... order by `datetime` desc limit 1
     
  7. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Order by насколько помню сортирует строки!?!
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  9. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Слушай ты мне довольно часто помогаешь ну не всегда толково канеш!) igordata

    Добавлено спустя 3 минуты 30 секунд:
    А Group by он разгрупирует таблицу обратно?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я стараюсь недоговаривать очевидного, чтобы человек научился сам мыслить этими новыми для него штуками.

    Сейчас скажу, что ордербай сортирует, а лимит - лимитирует. И нужны индексы, чтобы всю таблицу серверу не пришлось дрючить ради одной строки.

    Вперёд =)
     
  11. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Так всё таки если отправить sql запрос group by запрос навсегда изменит таблицу?
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ничего никто не изменит, ты что. Это всё только на выборку влияет. Соотв, если ты хочешь из лога, в котором куча юзеров заходила кучу раз, и всё это сохранено, выбрать сразу несколько юзеров и их даты последнего захода, то тебе надо юзать групбай и ордербай. Лимит поможет не выбирать слишком много за раз.
     
  13. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Спасибо вроде разобрался