powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выборка с mysql LEFT JOIN and JSON array->object
4 сообщений из 4, страница 1 из 1
Выборка с mysql LEFT JOIN and JSON array->object
    #39992500
LionGeek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Прошу помощи со следующей задачей.

В базе имеется таблица table1 с полем commun с json данными следующего вида [{"data": "95", "type": "sale"}, {"data": "104", "type": "customer"}, {"data": "13", "type": "contact"}]
и таблица table2

Пишу запрос:
$sel = mysqli_query($t, "SELECT t1.*, t2.name as name2
FROM `".DB_PREFIX."_table1` t1
LEFT JOIN `".DB_PREFIX."_table2` t2
ON CAST(t1.commun ->> '$.data' AS SIGNED) = t2.id
");
while($row = mysqli_fetch_assoc($sel)){
echo $row['name2'];
}

Такой запрос отлично работает если в поле commun простой объект {"data": "104", "type": "customer"}, а вот с массивом объектов не получается.

Такая запись так же не работает
on JSON_CONTAINS(t1.commun->'$[*].data', CAST(t2.id as JSON))

Подскажите, пожалуйста, что я не дописал в запросе.
...
Рейтинг: 0 / 0
Выборка с mysql LEFT JOIN and JSON array->object
    #39993709
LionGeek,

Предлагаю вариант. Надеюсь чем-нибудь поможет. ЗЫ не тестировал
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH RECURSIVE ind AS
(
SELECT 0 AS i 
UNION ALL
SELECT i+1 FROM ind WHERE i+1< (JSON_LENGTH((SELECT JSON_EXTRACT(t1.commun, '$**.data') FROM test)) )
)

SELECT t11.*,t2.name AS name2 FROM
(
SELECT t1.*, Val FROM
(SELECT JSON_EXTRACT((SELECT JSON_EXTRACT(t1.commun, '$**.data') FROM t1), CONCAT('$[', ind.i, ']') ) AS Val
FROM ind) 
) AS t11 LEFT JOIN t2 ON (CAST t11.VAl AS SIGNED) = t2.id
...
Рейтинг: 0 / 0
Выборка с mysql LEFT JOIN and JSON array->object
    #39993712
Вот те на 2018
LionGeek,

Предлагаю вариант. Надеюсь чем-нибудь поможет. ЗЫ не тестировал
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH RECURSIVE ind AS
(
SELECT 0 AS i 
UNION ALL
SELECT i+1 FROM ind WHERE i+1< (JSON_LENGTH((SELECT JSON_EXTRACT(t1.commun, '$**.data') FROM t1)) )
)

SELECT t11.*,t2.name AS name2 FROM
(
SELECT t1.*, y1.Val FROM t1, LATERAL
(SELECT JSON_EXTRACT((SELECT JSON_EXTRACT(t1.commun, '$**.data') FROM t1), CONCAT('$[', ind.i, ']') ) AS Val
FROM ind) AS y1
) AS t11 LEFT JOIN t2 ON (CAST t11.VAl AS SIGNED) = t2.id

Поправил косячок.
...
Рейтинг: 0 / 0
Выборка с mysql LEFT JOIN and JSON array->object
    #39993715
Вот те на 2018,
И еще один косячок исправил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH RECURSIVE ind AS
(
SELECT 0 AS i 
UNION ALL
SELECT i+1 FROM ind WHERE i+1< (SELECT MAX(d1.cnt) FROM (SELECT JSON_LENGTH(JSON_EXTRACT(t1.commun, '$**.data')) AS cnt FROM t1) AS d1)
)
SELECT t11.*,t2.name AS name2 FROM
(
SELECT t1.*, Val FROM t1, LATERAL
(SELECT JSON_EXTRACT((SELECT JSON_EXTRACT(t1.commun, '$**.data') FROM t1), CONCAT('$[', ind.i, ']') ) AS Val
FROM ind) WHERE Val IS NOT NULL 
) AS t11 LEFT JOIN t2 ON (CAST t11.VAl AS SIGNED) = t2.id
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выборка с mysql LEFT JOIN and JSON array->object
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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