Задавайте вопросы, мы ответим
Вы не зашли.
ЗДравствуйте подскажите пожалуйста можно ли использовать конструкцию else if внутри where?
Неактивен
Спасибо! но это не совсем то что мне нужно. Мне нужно выполнить именно if\else if\else и при каждой истине увеличивать переменную на 1.ПРобовал сделать как в официально документации, выдало ошибку.
Неактивен
Честно говоря, не вполне понимаю, что Вы хотите . Приведите таблицу, данные, и результат, который Вам нужен. Насчет ошибки - какой именно запрос в какой таблице Вы пробовали, и какую ошибку оно выдало?
Отредактированно deadka (06.06.2011 23:32:08)
Неактивен
допустим у нас есть очень простая таблица в которой есть 2 столбца action и profile_id.
Если у 2х соседних записей в выборке Action и profile_id одинаковые то мы считаем их как одну единицу контента.
Например у нас есть вот такая табличка
action_id profile_id
add 1
add 1
update 2
delete 3
При выборе 2х единиц контента мы выберем 3 первых записи.Т.к. у первой и второй записи action и profile_id одинаковые
Сделать такой запрос очень просто достаточно добавить в where
select *
FROM (подзапрос) As t1
WHERE
(@b:=t1.profile_id)+
(@a:=t1.action)+
(@count:=@count+if(@a<>t1.action or @b<>t1.profile_id,1,0))
AND
@count < 5 // 4 единицы контента
LIMIT
$offset,500;
НО мне нужно чтобы при определённом значении action он не объеденял записи в единицу контента. Допустим этот Action должен называться order.
Меняем условие на следующее
(@b:=t1.profile_id)+
(@a:=t1.action)+
(@count:=@count+if(@a<>t1.action or @b<>t1.profile_id or @a='action',1,0))
И оно не работает увеличивая count вместо 1 на 2. Вот я и подумал разделить это на 2 условия используя if \ else if
Неактивен
Уважаемые администраторы форума! возможно ли мне создать новую тему в ветке посвящённой програмированию, чтобы мне помогли с запросом? Спрашиваю разрещения так как обычно администраторы форумов не любят когда плодят дубли.
Неактивен
Создавать новую тему скорее не стоит - если администраторы сочтут нужным, то просто перенесут тему в другой раздел.
Не очень понятно то, что Вы делаете в запросе - сначала присваиваете переменным @a и @b значения, а потом делаете сравнения - ведь условие if в таком виде никогда не выполнится. Тут скорее нужно что-то вроде
Неактивен
Вариант который я написал выше работает. Мне нужно его модифицировать добавив чтобы при определённом значении Action он не делал групировку.
Если же сделать как Вы написали то получится что я не выберу значения которые мне нужны, они просто пропадут из-за group by.
Неактивен
Ваш вариант запроса вернул empty set. Приведите пожалуйста дамп Вашей таблицы (и структура и данные) и запрос, который Вы запускаете.
Неактивен
Запрос который Вы написали практически 1 в 1 как мой. Подскажите пожалуйста как его модифицировать чтобы он не группировал данные если action='order' или Action='add order'.
Структура таблицы
id(primary key)
action_id
profile_id
4 первых записи из таблицы
action_id profile_id
add 1
add 1
update 2
delete 3
Неактивен
Внешне похож, согласен, но у Вас проводятся вычисления в переменные иначе.
mysql> CREATE TABLE `t_4341` (id int primary key, `action_id` varchar(255), `profile_id` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into `t_4341` values(1,'add',1),(2,'add',1),(3,'update',2),(4,'delete',3);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * FROM t_4341 As t1 WHERE (@b:=t1.profile_id)+ (@a:=t1.action_id)+ (@count:=@count+if(@a<>t1.action_id or @b<>t1.profile_id,1,0)) AND @count < 5;
Empty set (0.01 sec)
Приведите то же самое со своим вариантом, а то непонятно, как у Вас другой результат получается.
Отредактированно deadka (08.06.2011 15:10:21)
Неактивен
сделайте перед запросом Set @count = 0;
У меня получается неправильный результат когда я изменя запрос вот так
С
(@b:=t1.profile_id)+ (@a:=t1.action_id)+ (@count:=@count+if(@a<>t1.action_id or @b<>t1.profile_id,1,0)
На
(@b:=t1.profile_id)+ (@a:=t1.action_id)+ (@count:=@count+if(@a<>t1.action_id or @b<>t1.profile_id or action='order' or action='add order',1,0)
Неактивен
Выведите переменную @count в списке запрашиваемых параметров. вот так:
Неактивен
Я так делал ранее. Вы наверное не совсем поняли какой результат я хочу получить.
Мне нужно чтобы групировались строки(не увеличивался счётчик @count) если у соседних строк одинаковый action и profile_id,и чтобы они не групировали если Action = order или add order.
Способ который я указал величивает счётчик как то странно, постоянно на 2 а может и на 6. Не понятно вообщем.
Неактивен
Приведите пожалуйста пример данных в таблице (со всяческими action = order и action = 'add order') и итоговую выборку, которую Вы хотите получить, не очень понимаю, как именно Вы хотите группировать строки.
Неактивен