MySQL LEFT JOIN json 字段与表中的另一个 id

标签 mysql json

我有两个表:

Bouquets

+----+------------+
| id | bouquet    |
+----+------------+
|  1 | Package #1 |
|  2 | Package #2 |
|  3 | Package #3 |
|  4 | Package #4 |
|  5 | Package #5 |
+----+------------+

Prices
+----+----------+-------------------------------------------------------------------+
| id | reseller | price                                                     
+----+----------+-------------------------------------------------------------------+
|  1 |        1 | {"1": "1.11", "2": "0.00", "3": "0.00", "4": "4.44", "5": "5.55"} |
+----+----------+-------------------------------------------------------------------+

我需要获取价格值不是“0.00”的花束名称...所以我尝试使用 LEFT JOIN 加入 bouquets.id ON prices.price 但我无法获取如何?

我需要得到这个:

+----+------------+
| id | bouquet    |
+----+------------+
|  1 | Package #1 |
|  4 | Package #4 |
|  5 | Package #5 |
+----+------------+

这是我的尝试,但我得到的结果是空的:

SELECT b.id, b.bouquet FROM bouquets b 
LEFT JOIN prices p ON JSON_CONTAINS(p.price, CAST(b.id as JSON), '$') != "0.00"
WHERE p.reseller=1;

最佳答案

这看起来并不容易完全在 mysql 中完成,最好的想法是使用(PHP、ASP 等)来完成繁重的工作,但经过大量的反复试验后,我发现了这篇文章:

Convert JSON array in MySQL to rows

从那里这个查询似乎对我有用

SELECT 
    b.id,
    b.bouquet
FROM bouquet AS b
JOIN (
    SELECT
        indx.id,
        indx.idx,
        JSON_EXTRACT(p.price, idx) AS bouquetprice
    FROM prices AS p
    JOIN ( 
        SELECT  '$."1"' AS idx, 1 AS id UNION
        SELECT  '$."2"' AS idx, 2 AS id UNION
        SELECT  '$."3"' AS idx, 3 AS id UNION
        SELECT  '$."4"' AS idx, 4 AS id UNION
        SELECT  '$."5"' AS idx, 5 AS id 
    ) AS indx
    WHERE JSON_EXTRACT(p.price, idx) IS NOT NULL
    AND p.reseller = 1
) AS ind
ON b.id = ind.id
AND ind.bouquetprice != "0.00"

技巧似乎是链接的 SO 帖子中的 CONCAT 不适用于您的 json 中的数字键名称。所以你必须求助于临时连接中的 2 个索引来搜索。

此外,临时连接表在创建不断增长的索引列表方面不太理想,但它至少是一个开始的地方。 (抱歉所有错误的命名 idx、indx 等)

编辑:忘记了 reseller 部分

关于MySQL LEFT JOIN json 字段与表中的另一个 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44002941/

相关文章:

java - JSONException : Misplaced object

javascript - ExtJS : Getting the response from a JSONP proxy?

php - 如何在一个查询中从多个数据库中选择记录?

jquery - mysql 查询 - 如何在 where 上编写 if 条件

php - 使用PHP的Elasticsearch多个术语搜索Json Query构建器

Javascript 数组转换为 JSON 对象而不是数组

java - 无法使用 org.json.simple.JSONObject 访问其余 CXF

php - 如何使用 Laravel 查询生成器执行此查询

php - 从数据库动态加载数据到引导 Accordion 导航

php - 如何删除php中的重复数据?