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

约翰

我有两个表:

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上的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 wrapper在node js中编程,这是我使用的解决方案,并且正在运行:

/* QUERY - aaBouquets */
            connection.query("SELECT id, bouquet FROM bouquets ORDER BY bouquet ASC",function(err, rows, fields){
                /* BOUQUETS - number */
                var total = rows.length;

                /* FOUND - bouquets */
                if (rows.length) {

                    /* GET - prices */
                    for (var i in rows) {
                        var s = 1;
                        connection.query("SELECT '"+rows[i].id+"' AS id, '"+rows[i].bouquet+"' AS bouquet FROM prices p LEFT JOIN bouquets b ON JSON_SEARCH(p.price, 'one', '$.\""+rows[i].id+"\"') WHERE p.reseller=? AND FORMAT(JSON_EXTRACT(price, '$.\""+rows[i].id+"\"'), 2) != \"0.00\"",[qreseller], function(err, rows, results){

                            /* CHECK - prices */
                            if (s < total) {
                                if (rows.length) {
                                    /* GET - prices */
                                    data.push(rows[0]);
                                };
                                s++;
                            } else {
                                /* CHECK - prices */
                                if(data.length) {
                                    if (rows.length) {
                                        /* GET - prices */
                                        data.push(rows[0]);
                                    };

                                    /* RETURN - servers data */
                                    res.json(data);
                                };
                            }
                        });
                    }
                }
            });

您可以看到第一个查询正在获取ID和花束名称,然后在for循环中,我使用该ID获取该花束ID的值,并且仅在值不等于“ 0.00”时显示。使用变量s和total在这里使用,因为如果我调用console.log(data)我得到未定义的变量。因为在节点js中变量是局部的,如果在外部调用,则需要在for循环内调用,我得到未定义的变量错误。

这样我只能得到定义价格的花束...我不知道是否可以在单个查询中完成(因为您不能在p.prices的b.id上使用LEFT JOIN ON),因此需要这两个查询。 ..对我来说,这还可以...所以,如果有人可以最小化代码以提高速度或改进...这是值得欢迎的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章