mysql 问题使用来自 json 字符串的连接来获取一个唯一值

标签 mysql json join

我正在尝试生成一个查询,但真的很纠结于如何使用 mysql 进行设置。

我有一张表 tblListings

----------------------------------------------
| id | name |  photo_order                    |
----------------------------------------------
| 1  | mike | ["119","122","118","120","121"] |
| 2  | john | ["123"]                         |
| 3  | bill |                                 |
----------------------------------------------

还有第二个表 tblImages 用于存储这样的照片

----------------------------------------------
| id | listing_id |  image_name              |
----------------------------------------------
| 1  | 119        | image1.jpg               |
| 2  | 122        | image2.jpg               |
| 3  | 123        | image3.jpg               |
| x  | xxx        | xxxxxetc.jpg             |
----------------------------------------------

我想要完成的是从 tblListings 中选择所有记录,然后将其与来自“photo_order”json 数组的初始值的单个匹配图像名称(1 个结果)连接起来。我相信这会使用 join,但我对如何实现这一点感到很困惑。

例如,对于记录 id 1,它将返回 tblListings.id = 1,name = mike,然后因为 photo_order 第一个值为 119,它将从 tblImages 中选择 listing_id 为 119 的记录并将其加入结果。

初始行的最终结果将是:

tblrecords.id  |  name | image_name |
-------------------------------------
 1             | mike  | image1.jpg |

我知道这是我可以在 PHP 中使用的东西,但输出给我带来了麻烦,最好使用 mysql 来完成。

非常困惑,完全没有思路,请尽可能提供帮助。

最佳答案

在 MySQL 中使用字符串并不总是性能的最佳解决方案。

但是如果您不能更改数据库结构或应用程序,或者即使您不关心执行时间,您也可以执行以下操作:

SELECT 
  i.*
FROM tblImages i JOIN (
  SELECT
    id,
    TRIM(LEADING '["' FROM SUBSTRING_INDEX(photo_order, '"', 2)) AS image_id 
  FROM tblListings
) l ON i.listing_id = l.image_id;

技巧就在这里:TRIM(LEADING '["' FROM SUBSTRING_INDEX(photo_order, '"', 2))。这样你就可以开始获取第二个 " 之前的所有内容,例如 ["119。然后从头开始修剪 ["。最后你可以在加入条件中使用剩余的数字。

关于mysql 问题使用来自 json 字符串的连接来获取一个唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954103/

相关文章:

mysql - 加入空表时出现问题

android - Ormlite 与 MySQL

正则表达式中的php变量?

mysql - SQL Join 2个表并得到各自的答案

python - 如何在 python 中将列表列表(列表)转换为 json 数组?

json - couchdb 查询带有关键参数的 View

mysql - 具有多个条件的加入

mysql - 加入具有多个 FK 和行的表

sql - 包含名为 "order"的列的查询的查询错误

javascript - 将对象下载为格式化的 JSON 文件