Günümüzde bir JSON dizisi kullanıyor bariz bir cevap olacaktır.
Bu eski ama yine de geçerli bir soru olduğu için kısa bir örnek oluşturdum. JSON işlevleri, mySQL 5.7.x / MariaDB 10.2.3'ten itibaren mevcuttur.
ELT () yerine bu çözümü tercih ediyorum çünkü gerçekten bir dizi gibi ve bu 'dizi' kodda yeniden kullanılabilir.
Ancak dikkatli olun: Bu (JSON) kesinlikle geçici bir tablo kullanmaktan çok daha yavaştır. Sadece daha kullanışlıdır. imo.
JSON dizisinin nasıl kullanılacağı aşağıda açıklanmıştır:
SET @myjson = '["gmail.com","mail.ru","arcor.de","gmx.de","t-online.de",
"web.de","googlemail.com","freenet.de","yahoo.de","gmx.net",
"me.com","bluewin.ch","hotmail.com","hotmail.de","live.de",
"icloud.com","hotmail.co.uk","yahoo.co.jp","yandex.ru"]';
SELECT JSON_LENGTH(@myjson);
SELECT JSON_VALUE(@myjson, '$[0]');
Ve burada bir fonksiyonda / prosedürde nasıl çalıştığını göstermek için küçük bir örnek:
DELIMITER //
CREATE OR REPLACE FUNCTION example() RETURNS varchar(1000) DETERMINISTIC
BEGIN
DECLARE _result varchar(1000) DEFAULT '';
DECLARE _counter INT DEFAULT 0;
DECLARE _value varchar(50);
SET @myjson = '["gmail.com","mail.ru","arcor.de","gmx.de","t-online.de",
"web.de","googlemail.com","freenet.de","yahoo.de","gmx.net",
"me.com","bluewin.ch","hotmail.com","hotmail.de","live.de",
"icloud.com","hotmail.co.uk","yahoo.co.jp","yandex.ru"]';
WHILE _counter < JSON_LENGTH(@myjson) DO
SET _result = CONCAT(_result, _counter, '-', JSON_VALUE(@myjson, CONCAT('$[',_counter,']')), '#');
SET _counter = _counter + 1;
END WHILE;
RETURN _result;
END //
DELIMITER ;
SELECT example();