L oop php массив хранится в одной SQL ячейке - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть таблица, которая содержит тело документа xml (например, массив php):

a:26:{s:4:"HEAD";a:1:{i:0;a:8:{s:5:"BUYER";s:13:"4640014349991";a:5:{s:7:"varGUID";s:3:" ";}s:8:"POSITION";a:17:{i:0;a:14:{s:14:"POSITIONNUMBER";s:1:"1";s:11:"DESCRIPTION";s:67:"Value 0";s:9:"UNITPRICE";s:5:"11.40";}i:1;a:14:{s:14:"POSITIONNUMBER";s:1:"2";s:11:"DESCRIPTION";s:69:"Value 1";s:9:"UNITPRICE";}i:2;}}s:7:"ECONINF";s:46:"Text";}

Одна ячейка для одного документа.

Теперь мне нужно найти для Например, все из UNITPRICE, которые дублируют, поэтому я должен повторить эту ячейку SQL, чтобы найти все UNITPRICE. Как я могу это сделать?

Я пытаюсь использовать SUBSTRING_INDEX для этого, но это не работает, потому что я думаю, что подстрока будет показывать только первое значение UNITPRICE в ячейке:

SELECT d.varName AS "Name 1", 
c.varName AS "Name 2",
a.varDocNum AS "Number",
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(b.`xmlBody`, '"PRODUCTIDBUYER";',-1),'"',2),'"',-1) AS "PRODUCTIDBUYER",
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(b.`xmlBody`, '"DESCRIPTION";',-1),'"',2),'"',-1) AS "DESCRIPTION",
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(b.`xmlBody`, '"UNITPRICE";',-1),'"',2),'"',-1) AS "UNITPRICE"

FROM xmls AS a
LEFT JOIN xmls_body AS b ON a.intDocID = b.intDocID
LEFT JOIN adresses AS c ON SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(b.`xmlBody`, '"BUYER";',-1),'"',2),'"',-1)=c.varAdress
LEFT JOIN adresses AS d ON a.varSender=d.varAdress

WHERE a.varRecipient in ('4640014349991')
AND a.intSendTimestamp < UNIX_TIMESTAMP('2020-02-09 23:59:59')
AND a.intSendTimestamp > UNIX_TIMESTAMP('2019-12-09 00:00:00')

AND SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(b.`xmlBody`,'"PRODUCTIDBUYER";',-1),'"',2),'"',-1) IN(
'110324',
'103208'
)
AND c.varName LIKE '%1065%'
OR '%1008%'

UPD:

Я создал такие процедуры, как:

DELIMITER |

CREATE PROCEDURE prcdProduct()
BEGIN
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(q.`xmlBody`, '"DESCRIPTION";',-1),'"',2),'"',-1) AS "Product"  FROM xmls_body AS q;
END 
|
DELIMITER ;

, но получаю ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL prcdProduct(),

, когда я пытаюсь использовать хранимую процедуру:

SELECT d.varName AS "Supplier", 
c.varName AS "Shop",
a.varDocNum AS "УПД",
CALL prcdProduct(),
...

, если я удалю CALL У меня будет ошибка, что FUNCTION dbName.prcdProduct does not exist , Но я думаю, что из-за того, что без CALL мы выполняем функции, а не PROCEDURE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...