我正在尝试生成一个查询,但真的很纠结于如何使用 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/