如何将两个列与一个序列化数据联接在一起?

灵芝

我正在尝试建立一个具有对产品的多类别支持的eshop,因此每当我从中选择特定类别时<select>,我都会将serialize()它们保存到数据库中。

所以现在,我想输出的所有DB DATAS我所需要的连接表,试图连接两个表:CATEGORIESECOMMERCE_PRODUCTSapp/models/ecommerce_model.php

$this->db
    ->select('
            ecommerce_products.id,
            categories.id AS catid,
            categories.title AS categories,
            ecommerce_products.manid,
            ecommerce_products.name
        ')
    ->join('categories', 'ecommerce_products.catid = categories.id', 'left');
    ->join('categories as man', 'ecommerce_products.manid = man.id', 'left');
    $this->db->get('ecommerce_products')->result();

第一个JOIN代表产品类别,第二个JOIN代表产品制造商,它们也存储在categories表中。

因此要澄清一下,ecommerce_products.catid在第一个JOIN内部调用的是序列化的,我想知道在执行JOIN之前如何反序列化它吗?

哈希笔

MySQL不知道什么是PHP序列化。您可以使用以下格式将类别的ID存储为字符串:

2,4,5,10,...

然后,结合使用SUBSTRING_INDEX()FIND_IN_SET() MySQL函数来检查categories.idin的存在ecommerce_products.catid

SUBSTRING_INDEX(
    SUBSTRING_INDEX(ecommerce_products.catid,
        ',',
        FIND_IN_SET(categories.id, ecommerce_products.catid)
), ',', -1)

要为每个产品记录选择类别标题,我们需要按GROUP_CONCAT()功能连接标题,因此最终查询将如下所示:

SELECT p.id,
       p.catid
       GROUP_CONCAT(cat.title ORDER BY cat.id SEPARATOR '|') as 'categories',
       p.manid,
       p.name
FROM ecommerce_products AS p
LEFT JOIN categories AS cat
    ON cat.id = SUBSTRING_INDEX(SUBSTRING_INDEX(p.catid, ',', FIND_IN_SET(cat.id, p.catid)), ',', -1)
-- more query...
GROUP BY p.id; -- Group the result to concatenate the categories titles

在这种方法中,您可能需要使用$this->db->query();方法来手动运行查询。

注意:
作为替代,您可以使用以下forON语句:

LEFT JOIN categories AS cat
    ON p.catid REGEXP CONCAT('[,]{0,1}', cat.id, '[,]{0,1}')

测试用例

这是我在SQLFiddle上的测试用例

SELECT p.id,
       p.name,
       GROUP_CONCAT(c.title ORDER BY c.id SEPARATOR '|') as 'categories'
FROM products as p
JOIN categories as c
  ON c.id = SUBSTRING_INDEX(SUBSTRING_INDEX(p.cat_id, ',', FIND_IN_SET(c.id, p.cat_id)) , ',', -1)
GROUP BY p.id;

结果:

ID    NAME          CATEGORIES
--    ---------     -----------
1     Product 1     Cat 1|Cat 3
2     Product 2     Cat 2|Cat 4
3     Product 3     Cat 1|Cat 4
4     Product 4     Cat 2|Cat 3

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将一列中的多行中的字符串连接在一起+一个查询中的内部联接

来自分类Dev

如何将一个表中另一个表具有多个ID的两个表联接在一起?

来自分类Dev

如何将两个不同的表连接在一起并合计为第三个表

来自分类Dev

如何将两个不同元素的jQuery动画slideUp和slideDown链接在一起

来自分类Dev

如何通过内部联接将两个DataTable联接在一起

来自分类Dev

如何将2个表和更新列连接在一起

来自分类Dev

如何将共享一个公共密钥的两个对象的两个值合并在一起并返回它?

来自分类Dev

如何将两个下一个结合在一起

来自分类Dev

如何将两个数据框连接在一起

来自分类Dev

将两个数据帧合为一个,将条目连接在一起

来自分类Dev

python-如何将两个列值在某个特定2个范围内的数据框连接在一起python?

来自分类Dev

如何将共享一个公共密钥的两个对象的两个值合并在一起并返回它?

来自分类Dev

如何将两个图像连接在一起?

来自分类Dev

如何修复将两个表连接在一起的错误

来自分类Dev

如何将两个壁板连接在一起以形成贯通?

来自分类Dev

如何将两个不同的表联接在一起并合计为第三个表

来自分类Dev

如何将两个不同元素的jQuery动画slideUp和slideDown链接在一起

来自分类Dev

MySQL-如何使用(LEFT)JOIN通过一个表将两个表连接在一起?

来自分类Dev

将数据插入两个表,将记录链接在一起

来自分类Dev

SQL如何通过特定的列将两个表连接在一起?

来自分类Dev

如何将这两个PSQL查询正确地连接在一起?

来自分类Dev

如何将两个实体对象连接在一起?

来自分类Dev

在Rust中,如何将一个String与一个换行符连接在一起,然后再将另一个String连接在一起?

来自分类Dev

将两个表连接在一起并在一个表中包含多个结果

来自分类Dev

如何将两个离子应用程序连接在一起?

来自分类Dev

如何将两个任务集合链接在一起?

来自分类Dev

如何基于主键将两个序列合并在一起?

来自分类Dev

将两个 ID 连接在一起以获得另一个列结果

来自分类Dev

如何将两个表连接在一起以创建 JSON | PHP

Related 相关文章

  1. 1

    如何将一列中的多行中的字符串连接在一起+一个查询中的内部联接

  2. 2

    如何将一个表中另一个表具有多个ID的两个表联接在一起?

  3. 3

    如何将两个不同的表连接在一起并合计为第三个表

  4. 4

    如何将两个不同元素的jQuery动画slideUp和slideDown链接在一起

  5. 5

    如何通过内部联接将两个DataTable联接在一起

  6. 6

    如何将2个表和更新列连接在一起

  7. 7

    如何将共享一个公共密钥的两个对象的两个值合并在一起并返回它?

  8. 8

    如何将两个下一个结合在一起

  9. 9

    如何将两个数据框连接在一起

  10. 10

    将两个数据帧合为一个,将条目连接在一起

  11. 11

    python-如何将两个列值在某个特定2个范围内的数据框连接在一起python?

  12. 12

    如何将共享一个公共密钥的两个对象的两个值合并在一起并返回它?

  13. 13

    如何将两个图像连接在一起?

  14. 14

    如何修复将两个表连接在一起的错误

  15. 15

    如何将两个壁板连接在一起以形成贯通?

  16. 16

    如何将两个不同的表联接在一起并合计为第三个表

  17. 17

    如何将两个不同元素的jQuery动画slideUp和slideDown链接在一起

  18. 18

    MySQL-如何使用(LEFT)JOIN通过一个表将两个表连接在一起?

  19. 19

    将数据插入两个表,将记录链接在一起

  20. 20

    SQL如何通过特定的列将两个表连接在一起?

  21. 21

    如何将这两个PSQL查询正确地连接在一起?

  22. 22

    如何将两个实体对象连接在一起?

  23. 23

    在Rust中,如何将一个String与一个换行符连接在一起,然后再将另一个String连接在一起?

  24. 24

    将两个表连接在一起并在一个表中包含多个结果

  25. 25

    如何将两个离子应用程序连接在一起?

  26. 26

    如何将两个任务集合链接在一起?

  27. 27

    如何基于主键将两个序列合并在一起?

  28. 28

    将两个 ID 连接在一起以获得另一个列结果

  29. 29

    如何将两个表连接在一起以创建 JSON | PHP

热门标签

归档