powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FAQ: Нумерация строк и другие вопросы про использование переменных
21 сообщений из 21, страница 1 из 1
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36122177
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: Пронумеровать строки в запросе
Достаточно часто возникает необходимость пронумеровать возвращаемые MySQL строки средствами самой базы данных.

Решение:
Код: plaintext
1.
SELECT @i := @i +  1  AS row_number, your_table.*
FROM your_table, (select @i:= 0 );

В ряде случаев вы можете получить следующий ответ от MySQL:
Код: plaintext
Every derived table must have its own alias

Тогда необходимо добавить алиас (псевдоним):
Код: plaintext
1.
SELECT @i := @i +  1  AS row_number, your_table.*
FROM your_table, (select @i:= 0 ) AS z;

или воспользоваться механизмом присвоением нулевого значения переменной @i перед запросом, если такая возможность присутствует. Т.к. в случае если эти два запроса буду выполнены в разных подключениях, толку будет ноль, а вернее NULL .

Код: plaintext
1.
SET @id :=  0 ;
SELECT @id := @id +  1  AS row_number, your_table.* FROM your_table;

Код: plaintext
.mahoune .  
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36122356
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выборка нескольких последних записей в неких группах
(а.к.а TOP N queries in categories).

Допустим, имеется следуюшая задача :

Появилась необходимость получить несколько строк, отсортированных по какому-то признаку и сгруппированных по какому-либо полю. Например, поиск 5 последних сообщений по каждой теме. Пробовал получать вот таким запросом:

Код: plaintext
1.
2.
3.
4.
SELECT * FROM 
(SELECT DISTINCT type_a FROM table) AS t1 
INNER JOIN table AS t2 
ON t2.id IN 
(SELECT id FROM table WHERE type_a=t1.type_a ORDER BY date_a DESC LIMIT  5 )

но почему-то он выдает ошибку, что LIMIT в подзапросах не поддерживается (вроде это очень простая операция, не понимаю почему ее нет?). Единственный выход какой я вижу - это UNION, но при большом количестве типов это будет не очень удобно. Как быть в данном случае, может есть какой-то вариант получше?

Даже если ЛИМИТ проходит, последний запрос будет выпонятся для каждого
значения колонки "type_a". О производительности здесь говорить не приходится.

Решение с использованием переменных:

1. отсортировать таблицу по "type_a" и по "date_a DESC"
2. пронумеровать записи отдельно для кaждого значения "type_a"
3. выбрать первые 5 записи в каждой группе

Реализация:

1. отсортировать таблицу по "type_a" и по "date_a DESC".

Добавим селект для задания переменных
@rownum -- для хранения текушего счетчика
@typex -- для хранения текушего значения "type_a"

Код: plaintext
1.
select * from tableA ta, (select @rownum:= 1 , @typex:='_') zz
order by type_a, date_a DESC

2. пронумеровать записи отдельно для кaждого значения "type"

Код: plaintext
1.
2.
3.
4.
5.
6.
select ta.*,
if(@typex=ta.type_a, -- если "type_a" не изменился
@rownum:=@rownum+ 1 , -- то увеличить счетчик
@rownum:= 1 +least( 0 ,@typex:=ta.type_a)) AS rown -- иначе скинуть счетчик на 1 
-- и занести новое значение в @typex
from tableA ta, (select @rownum:= 1 , @typex:='_') zz
order by type_a, date_a DESC

3. выбрать первые 5 записи в каждой группе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from 
(
select ta.*,
if(@typex=ta.type_a, 
@rownum:=@rownum+ 1 , 
@rownum:= 1 +least( 0 ,@typex:=ta.type_a)) rown 
from tableA ta, (select @rownum:= 1 , @typex:='_') zz
order by type_a, date_a DESC
) yy
where rown <  6 

Примечания:
@rownum:=1+least(0,@typex:=ta.type) гарантирует обновление @typex
после проверки "if(@typex=ta.type..."

Спасибо javajdbc
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36122539
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пронумеровать поле таблицы "по-порядку"
Код: plaintext
1.
2.
3.
4.
5.
update 
   your_table
set
   field1 =(select @a:= @a +  1  from (select @a:=  0 ) s)
order by 
   field2, field3 ...
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36334566
magicprinc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подробный разбор всех техник работы с переменными в запросе

Advanced MySQL user variable techniques

http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

Финальный вариант X элементов из группы у него выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
select *, @num
from fruits
where
   (@num := if(type = @type, @num +  1 ,  1 )) is not null
   and (@type := type) is not null
   and (@num <=  2 );
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36482755
Богдан Гоцкий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
magicprinc
Финальный вариант X элементов из группы у него выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
select *, @num
from fruits
where
   (@num := if(type = @type, @num +  1 ,  1 )) is not null
   and (@type := type) is not null
   and (@num <=  2 );


Где гарантия, что порядок присвоений переменных @num и @type будет именно в том порядке как написано в запросе? По-моему этот запрос вообще недетерминирован и возвращает нужную нумерацию чисто случайно.
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36482780
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Богдан Гоцкий,

в принципе любая (за очень редким исключением) работа с переменными в резалт-сете, содержащем более одной записи, недетерминированна.
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36483244
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Богдан Гоцкий
Где гарантия, что порядок присвоений переменных @num и @type будет именно в том порядке как написано в запросе? По-моему этот запрос вообще недетерминирован и возвращает нужную нумерацию чисто случайно.

Действительно, порядок выполнения в СЕЛЕКТ и в WHERE групе не определен -- теоретически.
Практически я не видел доказаного случая неверного порядка.
Етот вопрос известен и решается, правда через задницу, но все же решается.
Посмотри второй пост в етой ветке, в самом конце:

автор
Примечания:
@rownum:=1+least(0,@typex:=ta.type) гарантирует обновление @typex
после проверки "if(@typex=ta.type..."
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36483257
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymБогдан Гоцкий,

в принципе любая (за очень редким исключением) работа с переменными в резалт-сете, содержащем более одной записи, недетерминированна.

Странная сентенция....
если делать правильно, то все будет детерминировано.... если неправильно делать,
то можно и пенис сломать...
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #36483289
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

я примерно это и имел в виду. :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ: Нумерация строк и другие вопросы про использование переменных
    #37500526
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Это FAQ-овый топик. Просьба не засорять его своими частными вопросами, для этого создавайте отдельные топики.
Все, что не относится непосредственно к сабжу, зачищено.
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #37500892
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЭто FAQ-овый топик.Так может, в "важные" его?
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #37739158
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Вот понадобилось... а оно... :)

Подход с переменными работает только при отсутствии сортировки в запросе, отличной от "по умолчанию" и нумерации только одной таблицы (без join!)

Столкнулся с тем, что при задании сортировки в режиме DESC - нумерация переменными или совсем не производится, или пересортировывается также по DESC.

Задача: оставить для каждого пользователя форума только по 10 ПОСЛЕДНИХ сообщений... то есть сообщения надо сгруппировать по пользователям, отсортировать в обратном порядке по дате и пронумеровать в прямом порядке (обратно дате!) и те, которые имеют номер в группе больше 10 - удалить нафиг...

ну и ещё повеселило:
Если таблица сообщений - сборка джойном из нескольких, то управление переменными в блоке where делается столько раз, сколько джойнов в сборке. То есть при двух таблицах (один джойн) - получаем только четные значения, при двух джойнах - кратные трем... и т.д.

лечится включением всей сборки и сортировки во вложенный подселект. Но проблема в том, что у меня при записях "сообщений" больше 1млн и с десяток тысяч "пользователей"... внутренний подселект без временной таблицы - валится напрочь "табличка повреждена..." или как оно там... запись во временную табличку - около 2 минут...
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #37743607
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

да... переменные в мускл-е (и вообше в СКЛ) -- дело
идеологически инородное... и требует осторожности в использовании...

1. было показано, что в зависимости от использовании-или-неиспользовании
индексов на джоинте переменные евалюировались по разному.
Т.е. для чистого СКЛ-а работа оптимизатора не влияет на результат,
но может повлиять на вычисление переменные

2. единственый прямой способ добится однозначного порядка --
как вы отметили выше -- использование подселектов -- соединять таблицы
внутри под-селекта но работать с переменными в следуюшем селекте.
типа:

2a select ....переменные....from (select * from A,B where ...ORDER BY ...)
2b select ....переменные....from (select * from A,B where ....) ORDER BY ...

наверное 2б будет правильнее

3. В сложных случаях -- подселекты являются проблемой ибо на
подселекты нет индексов -- т.е. лефт джоинт на подселект будет медленым.

4. Выборка ТОП-Н всегда предпологает двойной проход: нумерация а потом
отсечение -- я наблюдал случаи когда по нехватки памяти такие квери
падали на хард-диск. А ето тормозило запрос на несколько порядков...
На милионах записей это реально (я видел срыв на 400-600К на домашнем компе)

5. рекомендую создать новый топик по теме, поставить задачу,
выдать пример данных, описать таблицы и индексы

6. Переменные -- не панацея, вполне может случится что
работа через промежуточнуе таблицы будет быстрее... или
с переменными но по 100К за раз (что б все в памяти)...
...или...надо посмотреть.. :-)
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #37743876
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

не вижу смысла создавать отдельную тему. Надо оставить мой пост и ваш коммент "для ограничения применения", дабы народ не впадал в маразм, наступая на одни грабли. Этот пост можно потереть за ненадобностью.

Решается всё достаточно легко предварительным созданием временной таблицы на базе подселектов только с нужными полями и навешиванием нужного количества индексов для последующей быстрой выборки с переменными... больше миллиона записей пролетает на удаление (суммарно с созданием временной таблицы) за 30-60 секунд... для разового запроса на чистку базы - мелочь. Даже если делать раз в день.

Просто табличку мне надо было сразу создавать правильную, а не SELECT * FROM... :) Вполне достаточно только id,fkey,last_date
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ: Нумерация строк и другие вопросы про использование переменных
    #38268268
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mahoune Выборка нескольких последних записей в неких группах
(а.к.а TOP N queries in categories).

Допустим, имеется следуюшая задача :

Появилась необходимость получить несколько строк, отсортированных по какому-то признаку и сгруппированных по какому-либо полю. Например, поиск 5 последних сообщений по каждой теме. Пробовал получать вот таким запросом:

Код: sql
1.
2.
3.
4.
5.
SELECT * FROM 
(SELECT DISTINCT type_a FROM table) AS t1 
INNER JOIN table AS t2 
ON t2.id IN 
(SELECT id FROM table WHERE type_a=t1.type_a ORDER BY date_a DESC LIMIT 5)



но почему-то он выдает ошибку, что LIMIT в подзапросах не поддерживается (вроде это очень простая операция, не понимаю почему ее нет?). Единственный выход какой я вижу - это UNION, но при большом количестве типов это будет не очень удобно. Как быть в данном случае, может есть какой-то вариант получше?

Даже если ЛИМИТ проходит, последний запрос будет выпонятся для каждого
значения колонки "type_a". О производительности здесь говорить не приходится.

Решение с использованием переменных:

1. отсортировать таблицу по "type_a" и по "date_a DESC"
2. пронумеровать записи отдельно для кaждого значения "type_a"
3. выбрать первые 5 записи в каждой группе

Реализация:

1. отсортировать таблицу по "type_a" и по "date_a DESC".

Добавим селект для задания переменных
@rownum -- для хранения текушего счетчика
@typex -- для хранения текушего значения "type_a"

Код: sql
1.
2.
select * from tableA ta, (select @rownum:=1, @typex:='_') zz
order by type_a, date_a DESC



2. пронумеровать записи отдельно для кaждого значения "type"

Код: sql
1.
2.
3.
4.
5.
6.
7.
select ta.*,
if(@typex=ta.type_a, -- если "type_a" не изменился
@rownum:=@rownum+1, -- то увеличить счетчик
@rownum:=1+least(0,@typex:=ta.type_a)) AS rown -- иначе скинуть счетчик на 1 
-- и занести новое значение в @typex
from tableA ta, (select @rownum:=1, @typex:='_') zz
order by type_a, date_a DESC



3. выбрать первые 5 записи в каждой группе

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select * from 
(
select ta.*,
if(@typex=ta.type_a, 
@rownum:=@rownum+1, 
@rownum:=1+least(0,@typex:=ta.type_a)) rown 
from tableA ta, (select @rownum:=1, @typex:='_') zz
order by type_a, date_a DESC
) yy
where rown < 6



Примечания:
@rownum:=1+least(0,@typex:=ta.type) гарантирует обновление @typex
после проверки "if(@typex=ta.type..."

Спасибо javajdbc


Код: sql
1.
2.
3.
4.
5.
6.
7.
select ta.*,
if(@typex=ta.type_a, -- если "type_a" не изменился
@rownum:=@rownum+1, -- то увеличить счетчик
@rownum:=1+least(0,@typex:=ta.type_a)) AS rown -- иначе скинуть счетчик на 1 
-- и занести новое значение в @typex
from tableA ta, (select [color=red]@rownum:=1[/color], @typex:='_') zz
order by type_a, date_a DESC



и что никого не смутила ошибка??? первая група начнёт нумероваться с 2 а не с 1!!!
и логически ясно, и лично только что проверил на мускле.
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #38268593
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

по идее, первая група пройдет на строке:
Код: sql
1.
@rownum:=1+least(0,@typex:=ta.type_a)) AS rown -- иначе скинуть счетчик на 1 


...и нумерация пойдет с единицы.
Двойка будет если самая первая група будет иметь название '_'.

Если у вас по другому, приведите полный тест-кейс.
Бывают случаи когда жоинты сбивали порядок вывода на
блок СЕЛЕКТ.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ: Нумерация строк и другие вопросы про использование переменных
    #38663912
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеется ТАБЛИЦА - записи покупок

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `sales` (
	`idsale` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'PRIMARY KEY',

	`fk_idgood` INT(11) NOT NULL COMMENT 'FOREIGN KEY goods',

	`fk_iduser` INT(11) NOT NULL COMMENT 'FOREIGN KEY users'

--    ..... other information fields

);



ЗАДАЧА

Получить список самых активных покупателей и число их покупок.

(если есть несколько человек, купивших больше всех, вывести нужно каждого)

ожидаемый результат
Код: plaintext
1.
2.
3.
4.
5.
№юзер     Кол-во покупок

     23            120
     41            120
     77            120

при этом, не существует пользователя купившего больше чем 120.

РЕШЕНИЕ без переменных

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
SELECT t1.fk_iduser, t1.total

FROM (

-- получим список всех пользователей с числом покупок каждого
--
--№юзер     Кол-во покупок
--
--   1             32
--   2             12
--          ...
--  23            120
--  24             95
--  25            100
--          ...
--  41            120
--          ...
--  77            120
--          ...

    SELECT fk_iduser, COUNT(fk_idgood) as 'total'

    FROM sales

    GROUP BY fk_iduser

) t1 JOIN (

-- получим любого одного активного покупателя
-- нам нужно лишь определить это самое число - 120, 
-- максимальное кол-во покупок
--
--№юзер     Кол-во покупок
--
--  23            120
--

    SELECT fk_iduser, COUNT(fk_idgood) as 'total'

    FROM sales

    GROUP BY fk_iduser

    ORDER BY COUNT(fk_idgood) DESC
-- самой первой окажется запись с максимальным значением COUNT(fk_idgood)

    LIMIT 1
-- только её и возьмём

-- благодаря соединению, из общего списка отберём только те, у 
-- кого число покупок равно максимальному - 120
)  t2 ON t1.total=t2.total

-- результат
--     23            120
--     41            120
--     77            120



РЕШЕНИЕ с использованием ПЕРЕМЕННЫХ

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SELECT id_shopper, total 

FROM (
-- по сути если убрать все переменные, получаемая таблица идентична t1
-- из первого решения
--
    SELECT id_shopper,@m:=COUNT(idgood) AS 'total',IF(@k<@m,@k:=@m,@k)

    FROM sales join (SELECT @k:=0) k
-- инициализируем значение переменой @k
-- псевдоним используем лишь для того, что бы избежать
-- возможного ругательства об обязательности каждому подзапросу дать свой псевдоним

    GROUP BY id_shopper

--сначала будет обработана секция from, что даёт исходную таблицу + инициализированную
--переменную
--
--затем отработает группировка и выполняться будет секция select
-- на каждой строке, будет посчитано значение COUNT(idgood),
-- также это значение будет присвоено переменой @m
-- так же будет проверено, если текущее значение @k меньше @m, то 
-- обновляем значение @k 
--
--таким образом после полной отработки вложенного запроса, 
--@k будет хранить максимальное значение COUNT(idgood)
-- в первом решении мы это получали отдельным под-запросом с группировкой - t2

) t1

WHERE
-- єто запрос просто отфильтрует из t1, все записи
-- где сумма покупок не равна максимальной, 120
total = @k;

-- итого получим тот же результат. 



ПРЕИМУЩЕСТВА
быстродействие - мы не делаем лишний запрос с группировкой и сортировкой.
даже сама сортировка более медленный процесс, чем определение максимального значения
пробежав по записям и обновляя значение переменной.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ: Нумерация строк и другие вопросы про использование переменных
    #39579535
Ulibka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел упоминания когда рассматривалась одноранговая нумерация.
Возникла необходимость внутри группы пронумеровать по возрастанию.

Есть таблица сообщений (messages_wt), в этой таблице есть поле тем -TopicID_XF и поле сообщений - message_id, id1 - primary key
Внутри одного топика надо пронумеровать сообщения по возрастанию message_id.

Задачу решил так: (запрос работающий)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
UPDATE messages_wt m,
    (SELECT @row_num:=0) x,
    (SELECT @prev_value:=0) y,
    (SELECT 
        @row_num:=IF(@prev_value = TopicID_XF, @row_num + 1, 0) AS RR,
            TopicID_XF,
            id1,
            message_id,
            @prev_value:=TopicID_XF
    FROM
        messages_wt, (SELECT @row_num:=0) x, (SELECT @prev_value:=0) y
    ORDER BY TopicID_XF , message_id) z 
SET 
    m.rr = z.RR
WHERE
    (m.id1 = z.id1)



Но у меня есть подспудное чуство что зада решена очень коряво.
Меня смущает мощный подзапрос.
Подзапрос понадобился потому что в set не удается запихнуть присваивание.

Собственно вопрос такой - можно ли решить эту задачу без подзапроса ?
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #39579537
Ulibka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPD: предыдущий запрос оказался нерабочим.

Правильное решение без подзапроса:

Код: sql
1.
2.
3.
4.
5.
6.
 set @row_num := 0;
  set @prev_value := 0;
  
update messages_wt m
set m.RR= @row_num := IF(@prev_value=TopicID_XF,@row_num+1,0) +least(0,@prev_value := TopicID_XF)
order by TopicID_XF,message_id      
...
Рейтинг: 0 / 0
FAQ: Нумерация строк и другие вопросы про использование переменных
    #39579578
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UlibkaНашел упоминания когда рассматривалась одноранговая нумерация.
Возникла необходимость внутри группы пронумеровать по возрастанию.
Гм... 7489069
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ: Нумерация строк и другие вопросы про использование переменных
    #39973417
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(по мотивам одной темы на одном форуме)

Тонкость в присвоении инициализированным переменным нового значения.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table test (id int) select 1 id;
select id from test;

-- обе переменные получат значение 1
set @var1 := (select id from test where id=1);
select id into @var2 from test where id=1;
select @var1, @var2;

-- будет изменено на NULL только значение переменной @var1 
set @var1 := (select id from test where id=2);
select id into @var2 from test where id=2;
select @var1, @var2;



fiddle
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FAQ: Нумерация строк и другие вопросы про использование переменных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]