Автор Тема: Помогите с MySql  (Прочитано 6031 раз)

Оффлайн Тоха

  • Бывалый
  • **
  • Сообщений: 117
  • Карма: +54/-0
    • Просмотр профиля
Помогите с 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 | размножается

как сделать выборку животных, последним действием которых было размножение?

Оффлайн mimicria

  • Продвинутый
  • *****
  • Сообщений: 2599
  • Карма: +1429/-9
  • return (true);
    • Просмотр профиля
Re: Помогите с MySql
« Ответ #1 : 24 Июня 2009, 12:18:15 »
Ответ судя по всему неверный, поскольку не факт, что размножение будет последним действием существа.

Оффлайн BadRuss

  • Администратор
  • Завсегдатай
  • *****
  • Сообщений: 710
  • Карма: +377/-0
  • покой нам только снится
    • Просмотр профиля
    • Нахлыстовая Зуша
Re: Помогите с MySql
« Ответ #2 : 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='размножается'


чтото типо этого. в синтаксисе не ручаюсь, не проверял
Never drive faster than your guardian angel can fly!

Оффлайн ZEMA

  • Продвинутый
  • *****
  • Сообщений: 2081
  • Карма: +519/-0
    • Просмотр профиля
Re: Помогите с MySql
« Ответ #3 : 24 Июня 2009, 12:39:23 »
select * from _имя таблицы_
where action=размножается

Оффлайн Тоха

  • Бывалый
  • **
  • Сообщений: 117
  • Карма: +54/-0
    • Просмотр профиля
Re: Помогите с MySql
« Ответ #4 : 24 Июня 2009, 13:52:44 »
mimicria прав, запрос

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

выдает все записи, где action=размножается! А мне нужны только те, где размножение является последним действием за определенный промежуток времени.

Оффлайн ZEMA

  • Продвинутый
  • *****
  • Сообщений: 2081
  • Карма: +519/-0
    • Просмотр профиля
Re: Помогите с MySql
« Ответ #5 : 24 Июня 2009, 13:54:34 »
Для начала не плохо было бы сделать нормальную базу, где дата и время в одной таблице =) все было бы намного проще!

Оффлайн Тоха

  • Бывалый
  • **
  • Сообщений: 117
  • Карма: +54/-0
    • Просмотр профиля
Re: Помогите с MySql
« Ответ #6 : 24 Июня 2009, 14:16:34 »
ну это просто пример!

на самом деле дата и время у меня хранятся в одной ячейке в формате timestamp, как положено.

Оффлайн ili4

  • Администратор
  • Завсегдатай
  • *****
  • Сообщений: 963
  • Карма: +659/-2
    • Просмотр профиля
    • http://www.orn
Re: Помогите с MySql
« Ответ #7 : 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.
« Последнее редактирование: 24 Июня 2009, 22:58:53 от ili4 »

Оффлайн I-one

  • Завсегдатай
  • ****
  • Сообщений: 972
  • Карма: +84/-0
  • Hi!
    • Просмотр профиля
    • Сокровища в сети! Уникальная онлайн игра где можно заработать.
Re: Помогите с MySql
« Ответ #8 : 24 Июня 2009, 23:58:51 »
SELECT * FROM table_name WHERE (SELECT action FROM table_name ORDER BY date DESC LIMIT 0,1)='размножается'

date должен быть datetime
http://sokrovishavseti.ru/ - увлекательная, познавательная онлайн-игра с выводом денег. Присоединяйся!

Оффлайн BadRuss

  • Администратор
  • Завсегдатай
  • *****
  • Сообщений: 710
  • Карма: +377/-0
  • покой нам только снится
    • Просмотр профиля
    • Нахлыстовая Зуша
Re: Помогите с MySql
« Ответ #9 : 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.
работать не будет :)

Never drive faster than your guardian angel can fly!

Оффлайн ili4

  • Администратор
  • Завсегдатай
  • *****
  • Сообщений: 963
  • Карма: +659/-2
    • Просмотр профиля
    • http://www.orn
Re: Помогите с MySql
« Ответ #10 : 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.
работать не будет :)
работает. проверял.

Оффлайн BadRuss

  • Администратор
  • Завсегдатай
  • *****
  • Сообщений: 710
  • Карма: +377/-0
  • покой нам только снится
    • Просмотр профиля
    • Нахлыстовая Зуша
Re: Помогите с MySql
« Ответ #11 : 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.
работать не будет :)
работает. проверял.
я торможу :)
Never drive faster than your guardian angel can fly!