首页 / PHP / php-如何用一个序列化数据加入两列?
php-如何用一个序列化数据加入两列?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-如何用一个序列化数据加入两列?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2212字,纯文字阅读大概需要4分钟。
内容图文
![php-如何用一个序列化数据加入两列?](/upload/InfoBanner/zyjiaocheng/678/df2ced979c744cf685dd19179e25407c.jpg)
我正在尝试建立一个对产品提供多类别支持的eshop,因此每当我从< select>中选择特定类别时,我都会对其进行序列化()并将其保存到数据库中.
因此,现在,我想通过尝试连接两个表(我的app / models / ecommerce_model.php中的CATEGORIES和ECOMMERCE_PRODUCTS)输出需要的所有db数据的JOINed表:
$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代表产品制造商,它们也存储在类别表中.
因此,澄清一下,第一个JOIN内部调用的ecommerce_products.catid已序列化,我想知道在执行JOIN之前如何对其进行反序列化吗?
解决方法:
MySQL不知道什么是PHP序列化.您可以使用以下格式将类别的ID存储为字符串:
2,4,5,10,...
然后,结合使用SUBSTRING_INDEX()和FIND_IN_SET() MySQL函数来检查ecommerce_products.catid中category.id的存在:
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();方法来手动运行查询.
注意:
或者,您可以对ON语句使用以下内容:
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
内容总结
以上是互联网集市为您收集整理的php-如何用一个序列化数据加入两列?全部内容,希望文章能够帮你解决php-如何用一个序列化数据加入两列?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。