2012-02-07 2 views
1

я могу описать только вопрос на примере .. Если у меня есть эти данныеПолучить новые добавленные записи в базе данных

use-id   user-name   add-date 
--------------------------------------------------- 
    2    sami    17/1/2011 
    2    sami    18/1/2011 
    3    alaa    18/1/2011 
    4    jamal    19/1/2011 

Я хочу, чтобы выбрать самую новую строку для каждого пользователя, я хочу эти данные результат:

use-id   user-name   add-date 
--------------------------------------------------- 
    2    sami    18/1/2011 
    3    alaa    18/1/2011 
    4    jamal    19/1/2011 

для каждого уникального идентификатора пользователя. Я хочу, чтобы новостная лента добавила запись. как ?

+0

Спасибо за этот вопрос, мне тоже нужен ответ. – panoet

ответ

0

Один из способов, чтобы получить дату последней записи для каждого пользователя:

select `use-id`, max(`add-date`) as `latest` 
from <table_name> 
group by `use-id` 

Мы будем называть этот запрос newest_records, и использовать его, чтобы выбрать только те строки, которые имеют последнюю дату:

select a.* 
from <table_name> 
inner join newest_records b 
on a.`use-id` = b.`use-id` and a.`add-date` = b.`latest` 

Edit:

Собираем все вместе (копировать/вставить), мы имеем:

select a.* 
from <table_name> 
inner join ( 
    select `use-id`, max(`add-date`) as `latest` 
    from <table_name> 
    group by `use-id`) b 
on a.`use-id` = b.`use-id` and a.`add-date` = b.`latest` 
+0

Зачем нужен второй запрос? не первый делает то, что требуется? – Adham

+0

@Bader - нет, первый запрос получает только 'use-id' и' date' - ** не все строки **. Второй запрос использует первый, чтобы получить остальные столбцы в интересующих строках. Конечно, вы могли бы объединить их в один запрос, я просто подумал, что их раскалывание сделало его более ясным. –

+0

спасибо, выберите 'use-id',' use-name', max ('add-date') как' last' от Группа 'use-id' .. верна? – Adham

0

Как я понимаю User-Id определяет User-Name (User-Id --> User-Name). Это означает, что не будет двух равных User-Id с разными User-Name. И ваши данные наглядно показывают это с User-Id номер 2, которые оба имеют одинаковые User-Name (sami).

Так что было бы справедливо, чтобы сделать более простой и более эффективный запрос:

select user-id, user-name, max(add-date) from table1 
group by user-id, user-name 

Примечание: MySql также позволяет удалить user-name из группы по

Теперь, очевидно, ваша таблица отсутствует Normalization. Ваша таблица должна выглядеть следующим образом:

YourTable(User-Id, Add-Date)

И вы должны также иметь другую таблицу Users, который должен выглядеть следующим образом:

Users(User-Id, User-Name)

И получить результат вы ожидаете в этом новую схему вы должны подключить к обеим таблицам.