一个查询语句怎么写,mysql php

php中文网
发布: 2016-06-23 14:15:16
原创
1182人浏览过

mysql php

数据库表结构
产品表 product

产品id        产品目录      产品名称
productid    cids        productname
1            (1,3,4)     精品服装1
2            (3,8)       精品服装2
3            (7,4,9)     精品服装3


需求:
1、比如进入一个产品的页面,通过url得到productid,如何通过productid 得到cids
   现需要写个语句,找到product表中,与cids 有相同的所有产品

比如通过url得到了productid值为1,那么cids值为(1,3,4),要找出product表中只要含有 1或3或4的所有产品

回复讨论(解决方案)

将 1,3,4 分割成数组,然后遍历查询。

你这个要求有几个问题,首先说明数据库表设计的完全不对,要是查询出的结果还要拆分,拆完了还要like的查询那么就应该重新设计这个表,比如一行只记一个cids。

如果你一定要进行现在这样的操作,我建议你分两步走,不然会非常难写,第一步先

select cids from product where productid = xxxx
登录后复制


得到的结果,比如是(1,3,4)在PHP中拆成数组,然后数据库中查询
select productid from product where ','+cids+',' like '%,1,%'unionselect productid from product where ','+cids+',' like '%,3,%'unionselect productid from product where ','+cids+',' like '%,4,%'
登录后复制



不直接like,而前后加逗号的原因是如果是12,13,14也会like1成功

另外这个写法如果表大了会很慢,因为会全表扫描,所以我还是建议你把表结构改一下。

select productid, productnamefrom product where find_in_set((select cids from product where productid = '$productid'), cids)
登录后复制

未经测试,如果不行,则先根据$productid查询出$cids,然后用$cids代替find_in_set函数的第一个参数即可。
如2楼所说,如果表记录很大,那么可能会很慢,建议还是改一下表结构。把productid和cid用单独一个表来记录对应关系,做好索引。

请将 cids 两端的圆括号去掉
即形如 (1,3,4) 的改为形如 1,3,4 的
然后使用自连接,连接条件使用 find_in_set 函数计算
select T1.* from product T1, product T2 where find_in_set(T1.productid, T2.cids) and 2.productid=1

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号