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

morrisonwu 2013-07-11 01:56:26
数据库表结构
产品表 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的所有产品
...全文
121 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
板功 2013-07-12
  • 打赏
  • 举报
回复
select productid, productname
from product 
where find_in_set((select cids from product where productid = '$productid'), cids)
未经测试,如果不行,则先根据$productid查询出$cids,然后用$cids代替find_in_set函数的第一个参数即可。 如2楼所说,如果表记录很大,那么可能会很慢,建议还是改一下表结构。把productid和cid用单独一个表来记录对应关系,做好索引。
xuzuning 2013-07-12
  • 打赏
  • 举报
回复
请将 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
beijing990101 2013-07-11
  • 打赏
  • 举报
回复
你这个要求有几个问题,首先说明数据库表设计的完全不对,要是查询出的结果还要拆分,拆完了还要like的查询那么就应该重新设计这个表,比如一行只记一个cids。 如果你一定要进行现在这样的操作,我建议你分两步走,不然会非常难写,第一步先
select cids from product where productid = xxxx
得到的结果,比如是(1,3,4)在PHP中拆成数组,然后数据库中查询

select productid from product where ','+cids+',' like '%,1,%'
union
select productid from product where ','+cids+',' like '%,3,%'
union
select productid from product where ','+cids+',' like '%,4,%'
不直接like,而前后加逗号的原因是如果是12,13,14也会like1成功 另外这个写法如果表大了会很慢,因为会全表扫描,所以我还是建议你把表结构改一下。
一起混吧 2013-07-11
  • 打赏
  • 举报
回复
将 1,3,4 分割成数组,然后遍历查询。

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧