У меня есть таблица, которая содержит тело документа 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