Форум.orn

HARD&SOFT => Программирование => WEB => Тема начата: Тоха от 24 Июня 2009, 11:13:48

Название: Помогите с MySql
Отправлено: Тоха от 24 Июня 2009, 11:13:48
Может быть вопрос и элементарный, сразу говорю, читать мануал нет времени.

есть база данных

| date       | time | animal |        action      |
------------------------------
| 22/06/09 | 22.00 | rabbit | спит
| 7/05/09   | 15.15 | cat    | ест
| 10/06/09 | 08.40 | rabbit | размножается
| 20/07/09 | 22.00 | rabbit | спит
| 7/05/09   | 05.35 | mouse| ест
| 10/06/09 | 08.00 | cat    | размножается
| 22/06/09 | 14.03 | rabbit | спит
| 7/05/09   | 23.48 | cat    | ест
| 10/06/09 | 08.40 | mouse | размножается

как сделать выборку животных, последним действием которых было размножение?
Название: Re: Помогите с MySql
Отправлено: mimicria от 24 Июня 2009, 12:18:15
Ответ судя по всему неверный, поскольку не факт, что размножение будет последним действием существа.
Название: Re: Помогите с MySql
Отправлено: BadRuss от 24 Июня 2009, 12:24:42
select lanimal from (
     select last(animal) as lanimal ,last(action) as laction from table_name order by date desc,time desc group by 1,2
) where laction='размножается'


чтото типо этого. в синтаксисе не ручаюсь, не проверял
Название: Re: Помогите с MySql
Отправлено: ZEMA от 24 Июня 2009, 12:39:23
select * from _имя таблицы_
where action=размножается
Название: Re: Помогите с MySql
Отправлено: Тоха от 24 Июня 2009, 13:52:44
mimicria прав, запрос

select * from _имя таблицы_
where action=размножается

выдает все записи, где action=размножается! А мне нужны только те, где размножение является последним действием за определенный промежуток времени.
Название: Re: Помогите с MySql
Отправлено: ZEMA от 24 Июня 2009, 13:54:34
Для начала не плохо было бы сделать нормальную базу, где дата и время в одной таблице =) все было бы намного проще!
Название: Re: Помогите с MySql
Отправлено: Тоха от 24 Июня 2009, 14:16:34
ну это просто пример!

на самом деле дата и время у меня хранятся в одной ячейке в формате timestamp, как положено.
Название: Re: Помогите с MySql
Отправлено: ili4 от 24 Июня 2009, 22:54:29
select * from (select * from animals where time = (select max(time) from animals a2 where animals.animal = a2.animal)) as z where action = 'размножается'

Ну естественно колонка time это timestamp.
Название: Re: Помогите с MySql
Отправлено: I-one от 24 Июня 2009, 23:58:51
SELECT * FROM table_name WHERE (SELECT action FROM table_name ORDER BY date DESC LIMIT 0,1)='размножается'

date должен быть datetime
Название: Re: Помогите с MySql
Отправлено: BadRuss от 25 Июня 2009, 08:33:19
select * from (select * from animals where time = (select max(time) from animals a2 where animals.animal = a2.animal)) as z where action = 'размножается'

Ну естественно колонка time это timestamp.
работать не будет :)

Название: Re: Помогите с MySql
Отправлено: ili4 от 25 Июня 2009, 08:51:07
SELECT * FROM table_name WHERE (SELECT action FROM table_name ORDER BY date DESC LIMIT 0,1)='размножается'

date должен быть datetime
работать не будет.
если последняя запись была 'размножается' - выберет все записи, иначе ничего не выберет.
т.к. вложенный в условие запрос запрос (SELECT action FROM table_name ORDER BY date DESC LIMIT 0,1) возвращает последнее действие не конкретного животного, а глобально. (т.е. получается where 'размножается'='размножается')

select * from (select * from animals where time = (select max(time) from animals a2 where animals.animal = a2.animal)) as z where action = 'размножается'

Ну естественно колонка time это timestamp.
работать не будет :)
работает. проверял.
Название: Re: Помогите с MySql
Отправлено: BadRuss от 25 Июня 2009, 09:19:31
SELECT * FROM table_name WHERE (SELECT action FROM table_name ORDER BY date DESC LIMIT 0,1)='размножается'

date должен быть datetime
работать не будет.
если последняя запись была 'размножается' - выберет все записи, иначе ничего не выберет.
т.к. вложенный в условие запрос запрос (SELECT action FROM table_name ORDER BY date DESC LIMIT 0,1) возвращает последнее действие не конкретного животного, а глобально. (т.е. получается where 'размножается'='размножается')

select * from (select * from animals where time = (select max(time) from animals a2 where animals.animal = a2.animal)) as z where action = 'размножается'

Ну естественно колонка time это timestamp.
работать не будет :)
работает. проверял.
я торможу :)