MySQL Итерации через элементы разделенной строки и делать с ними вещи

У меня есть ячейка в одной из моих таблиц сообщества MySQL 5.1. Содержимое всегда является определенным числом (-ами). Если имеется более одного номера, то оно ограничено символом ; точка с запятой.

Например:

 | Column | 1ar8fj 99dkek;adjidk3;dajdid divdae;dadjid; NULL dkadjcud;dasd;adfkvdo dkjfakj ... 

Мне нужно сделать код, который принимает каждое значение столбца, разбивает его на ; а затем использует каждое значение после того, как он был разделен на другой запрос и выводит результаты.

Я знаю, что могу сделать это с PHP, но мне не нужно делать это на веб-странице, поэтому мне было интересно, возможно ли это писать в синтаксисе MySQL? PHP-код будет выглядеть примерно так:

 <?php $result = $mysqli->query('select column from table;'); while ($row = $result->fetch_array($result)){ $id_numbers = explode($row[0],';'); foreach($id_numbers as $key => $val){ // do another query $result2 = $mysqli->query('select * from table2 where col_val = "'.$val.'"'); while ($row2 = $result2->fetch_array($result2){ echo $row2[0].'<br>'; } } } ?> 

Возможно ли это непосредственно в синтаксисе MySQL?

Благодаря!!!

Уф. Хорошо. Я, наконец, получил его работу, но вот решение как хранимая процедура, которая берет строку как вход для разделителя и запускается в данной таблице, называемой testtable

 --Procedure: sprecursplit --DROP PROCEDURE IF EXISTS sprecursplit; DELIMITER | CREATE PROCEDURE sprecursplit ( IN delim nvarchar(255) ) BEGIN declare tdone tinyint unsigned default(0); declare depth int unsigned default(1); declare datas nvarchar(255) default(''); declare done tinyint unsigned default(0); declare dlength int unsigned default(1); declare hlength int unsigned default(0); declare pos int unsigned default(1); declare runpos int unsigned default(1); declare slice nvarchar(255) default(''); drop table if exists allsubs; create temporary table allsubs(id int unsigned auto_increment, val nvarchar(255), primary key (id))engine = memory; while tdone <> 1 do if depth <= (select count(*) from testtable) then select t.datastring into datas from testtable t where t.id = depth limit 1; if length(datas) > 0 then set dlength = length(delim); set hlength = length(datas); set pos = 1; set runpos = 1; set slice = ''; set done = 0; if hlength > 0 then while done <> 1 do if runpos > hlength then set done = 1; else set pos = locate(delim, substring(datas from runpos)); if pos <> 1 then if pos > 1 then set slice = substring(datas from runpos for (pos - 1)); else set slice = substring(datas from runpos); end if; insert into allsubs (val) values (slice); end if; if pos = 0 then set runpos = runpos + hlength; else set runpos = runpos + pos + dlength - 1; end if; end if; end while; end if; end if; set depth = depth + 1; else set tdone = 1; end if; end while; select * from allsubs; drop table allsubs; END| DELIMITER ;