powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как объявить переменную содержащую список ?
13 сообщений из 13, страница 1 из 1
Как объявить переменную содержащую список ?
    #40131565
Fatid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Подскажите пожалуйста. Можно ли и как объявить переменную, которая будет содержать список значений.

Не вот так SET @q = 28361;
А условно вот так SET @q IN (28361, 46272, 64848);

Заранее большое спасибо ☀️
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131570
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fatid,

можно
SET @user_var = "1,2,3,4,5"
https://dev.mysql.com/doc/refman/8.0/en/user-variables.html
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131650
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основной вопрос - зачем, с какой целью. В зависимости от того, как потом этот список использовать, могут быть разные решения.
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131720
Fatid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, объясняю. У меня есть в бд пользователи веб ресурса, каждый пользователь имеет емеил.

И вот иногда есть задачки отключить им рассылку с веб.ресурса. Иногда сразу несколько задач по разным причинам и чтобы сделать в одном запросе я хочу объявить в переменную сразу несколько почт.

Типо

SET @h IN ('makarov@mail.ru', 'gaynova@mail.ru', 'ivanov@gmail.com')

UPDATE база данных.таблица SET email = 0 WHERE email = @h

Иногда бывают номера id скажем,

И я объявляю переменную
SET @y = 57392

И соответственно условие WHERE id = #y

Только что в том, что в данном примере хотелось бы сразу в одну переменную объявить несколько почт или несколько айди и уже к ним (к каждому полю таблице) применить запрос апдейта. Надеюсь понятно объяснил, если-что объясню ещё более точнее.
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131756
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fatid,

Насколько мне известно, такого нет в MySql, но есть другое решение
Код: sql
1.
WHERE FIND_IN_SET(email, 'makarov@mail.ru,gaynova@mail.ru,ivanov@gmail.com')
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131763
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при работе со строками сотня рабочих вариантов, если не сотня, то десяток точно.

Как вариант LOCATE
Код: sql
1.
2.
SET @h ='makarov@mail.ru, gaynova@mail.ru, ivanov@gmail.com';
UPDATE база данных.таблица SET email = NULL WHERE LOCATE(email,@h)

в данном случае не говорим о скорости выполнения запроса
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131765
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

Вот точно не стоит использовать LOCATE напрямую.
Пример, нужно найти адрес 'rov@gmail.com' из 'makarov@gmail.com, gaynovarov@gmail.com, testrov@gmail.com'
такого адреса нет в списке, но при использовании LOCATE совпадения будут по всем трем адресам.
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131768
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

да, согласен
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131769
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov
в данном случае не говорим о скорости выполнения запроса

Подтверждаю, при использование LOCATE или FIND_IN_SET будет полный скан таблицы. Никаких индексов.
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131790
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fatid
И вот иногда есть задачки отключить им рассылку с веб.ресурса. Иногда сразу несколько задач по разным причинам и чтобы сделать в одном запросе я хочу объявить в переменную сразу несколько почт.
И сразу видно, что подход - неверен. Отключение - оно должно быть перманентным, тогда как манипуляции с UDV - это до обрыва или закрытия соединения.

Так что либо дополнительное поле в таблице пользователей, либо отдельная таблица блокирования аккаунтов либо отдельных функций.
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131809
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может, сморожу глупость, ибо опыт в мускуле чуть больше, чем 0:)
А почему не писать этот список во временную таблицу и привязывать к ней запрос.
Скорость выполнения, полагаю, будет намного выше всяких locate, find, like и проч., т.к. как все нужные индексы на рабочих таблицах будут задействованы
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40131815
OlegROA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fatid
Akina, объясняю. У меня есть в бд пользователи веб ресурса, каждый пользователь имеет емеил.

И вот иногда есть задачки отключить им рассылку с веб.ресурса. Иногда сразу несколько задач по разным причинам и чтобы сделать в одном запросе я хочу объявить в переменную сразу несколько почт.

Типо

SET @h IN ('makarov@mail.ru', 'gaynova@mail.ru', 'ivanov@gmail.com')

UPDATE база данных.таблица SET email = 0 WHERE email = @h


Ну, прямо так и пиши:
Код: sql
1.
UPDATE table SET email=NULL WHERE email IN ('makarov@mail.ru', 'gaynova@mail.ru', 'ivanov@gmail.com')


Естественно, сам список адресов формируешь в виде строки с запятой в качестве разделителя. После формируешь строку запроса и выполняешь его:
Код: php
1.
2.
$sql = "UPDATE table SET email=NULL WHERE email IN ($email_list)";
$dbh->exec($sql);


Аналогично делаешь и для списка ид пользователей.
...
Рейтинг: 0 / 0
Как объявить переменную содержащую список ?
    #40132248
Fatid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegROA, Было бы всё так просто я бы на форуме не регистрировалися )) там переменная используется чтобы сразу в нескольких запросах использовать. Там в одном запросе несколько раз данных даже может быть. Это аля цикл окольными путями ибо создать процедуру права не позволяют.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как объявить переменную содержащую список ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (5), Yandex Bot, Bing Bot
x
x
Закрыть


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