Comments 11
Как бы там и while есть и еще много чего, что узнает человек зайдя на сайт с документацией по mysql
+10
Собственно сам этого не знал. Но все таки под названия темы подходит. Вполне простейший цикл, причем работающий при условии заданном в запросе. Думаю найдутся люди, для которых эта статья будут полезна. Вот еще и о While узнают в комментариях. Насколько я понимаю, в данном случае он не подошел бы.
+1
Зачем еще и подзапрос? Можно и так:
А насчет цикла, я где то в интернете натыкался на организацию цикла с помощью Benchmark, правда он не подойдет для запросов типа UPDATE. А то, что вы называете циклом в вашей статье, как то слабо на него похоже, это всего лишь обычный способ использовать переменные.
UPDATE `table` SET `name`=CONCAT('Проект ', @i := @i+1) WHERE `type` = 1 ORDER BY `id`;
А насчет цикла, я где то в интернете натыкался на организацию цикла с помощью Benchmark, правда он не подойдет для запросов типа UPDATE. А то, что вы называете циклом в вашей статье, как то слабо на него похоже, это всего лишь обычный способ использовать переменные.
+1
Америку конечно лично мне не открыли, с помощью переменных действительно многое удобно делать.
Хочу привести ещё один пример, посложнее, применения переменных в запросе:
Хочу привести ещё один пример, посложнее, применения переменных в запросе:
Выборка вложенного в одно поле параметра
Иногда для хранения различных характеристик товара, чтобы не плодить громадных таблиц, удобно записать набор параметров прямо в поле `params` таблицы, в виде '|key:value|key:value|key:value|...|'.
Поиск по определённому параметру примитивен, используя LIKE:
Но когда встал вопрос выборки по какому-то одному параметру, тут уже начинаются сложности. Например вывести список значений параметра param1. Можно конечно обойтись без переменных, но тогда запрос будет сложнее. На помощь приходят переменные:
Поиск по определённому параметру примитивен, используя LIKE:
SELECT `id` FROM `table` WHERE `params` LIKE '%|partam1:100500|%'
Но когда встал вопрос выборки по какому-то одному параметру, тут уже начинаются сложности. Например вывести список значений параметра param1. Можно конечно обойтись без переменных, но тогда запрос будет сложнее. На помощь приходят переменные:
SELECT DISTINCT
SUBSTRING(`params`, @start, LOCATE('|', `params`, @start)-@start) as 'val'
FROM
`table`, (select @start:=0) s
WHERE
`params` LIKE '%|param1:%'
&& (@start := LOCATE('|param1:', `params`)+LENGTH('|param1:')) is not null
0
трэш какой
+2
На сколько я помню, в таком поиске не будет работать индекс и, как следствие, резко упадет производительность.
0
Да проблемы с производительностью тут естественно есть, поэтому использовать такие конструкции нужно в «правильных местах» и с умом, т. к. индексы не используются.
0
Я например этот запрос применял для вывода таблицы параметров одного товара (товар был специфичный, маслостанции, у каждого товара «подтоваров» с разными параметрами — вольтаж, объём бака, производительность).
Для вывода таблицы параметров всей группы товаров используется этот запрос (плюс для сбережения производительности используется кэш).
Кстати мерил производительность, в данном случае она мало различается, т. к. сделать манипуляции над небольшим количеством строк получалось быстрее, чем осуществлять поиск в большой таблице (пусть и с индексами).
Для вывода таблицы параметров всей группы товаров используется этот запрос (плюс для сбережения производительности используется кэш).
Кстати мерил производительность, в данном случае она мало различается, т. к. сделать манипуляции над небольшим количеством строк получалось быстрее, чем осуществлять поиск в большой таблице (пусть и с индексами).
0
Только это не цикл, а эмуляция ROW_NUMBER().
+6
Но поиск в сети, как сделать цикл в MySQL, ничего мне не дал.
Странно как-то вы искали. В следующий раз идите сразу в доку. Flow Control Statements
0
Sign up to leave a comment.
Простейший цикл на MySQL