Задавайте вопросы, мы ответим
Вы не зашли.
Мне необходимо выбрать по 5ть наиболее свежих строк для каждого из значений поля type. Как это лучше всего сделать? С помощью SQL выражения или же написать процедуру? Для меня предпочтительнее использовать первый вариант.
Для оптимизации колличества запросов разумеется, д.б. всего один запрос.
Буду признателен, если поможете составить такого рода выражение!
Касательно СУБД - использую MySQL 5.1.36.
Отредактированно Siegfrid (08.09.2009 02:44:09)
Неактивен
похоже ответ на мой же вопрос - использование выражения UNION. Я правильно понимаю, что физически один запрос будет состоять из нескольких подзапросов, объединеных ключевым словом UNION?
Неактивен
Неактивен
Столкнулся со следующей проблемой.
Неактивен
vasya написал:
set @n=5, @i=0, @t='';
select * from (select * from имя_таблицы order by type asc, колонка_с_датой desc) where @i<@n and if(@t=type,@i:=@i+1,(@i:=0) or (@t:=type));
спасибо, за совет, а вот вопрос касательно вызова процедур, можно ли в MySQL в качестве параметра передавать процедуре массив данных, если да, то можно какой нить примерчик простенький?
Касательно массива - он может содержать произвольное количество значений - поддерживает ли MySQL динамическое создание таких параметров?
Неактивен
Вась, возможно это таки версия MySQL:
[aquatica] root test > set @i:=0,@t:='';
Query OK, 0 rows affected (0.00 sec)
[aquatica] root test > select a, @t, @i, IF(@t=a,@i:=@i+1,@t:=a) FROM test;
+-------+------+------+-------------------------+
| a | @t | @i | IF(@t=a,@i:=@i+1,@t:=a) |
+-------+------+------+-------------------------+
| one | | 0 | one |
| one | one | 0 | 1 |
| one | one | 1 | 2 |
| two | one | 2 | two |
| three | two | 2 | three |
+-------+------+------+-------------------------+
5 rows in set (0.02 sec)
[aquatica] root test > set @i:=0,@t:='one';
Query OK, 0 rows affected (0.00 sec)
[aquatica] root test > select a, @t, @i, IF(@t=a,@i:=@i+1,@t:=a) FROM test;
+-------+------+------+-------------------------+
| a | @t | @i | IF(@t=a,@i:=@i+1,@t:=a) |
+-------+------+------+-------------------------+
| one | one | 0 | 1 |
| one | one | 1 | 2 |
| one | one | 2 | 3 |
| two | one | 3 | two |
| three | two | 3 | three |
+-------+------+------+-------------------------+
5 rows in set (0.00 sec)
[aquatica] root test > \s
--------------
mysql Ver 14.14 Distrib 5.1.34, for debian-linux-gnu (i486) using readline 5.2
Неактивен
Уважаемые модераторы а как на счет моего вопроса?
Неактивен
Понятия «массив» в MySQL нет. Самое близкое, что можно предложить, — временная табличка,
которая будет использоваться хранимой процедурой.
Неактивен
Спасибо! Видимо придется использовать все таки union выражение.
Неактивен
Это вы о чем?
Неактивен