点击一个分类,把当前分类及其所有子分类的所有产品列出来
上面是分类表,产品表就是 关联 分类表的 cate_id ,确定产品所属的分类
现在我想要的效果是 点击一个分类,把当前分类及其所有子分类的所有产品列出来
请大神指教
想的头都破了,递归?还是?怎么弄呢?
回复讨论(解决方案)
点击了分类,于是就知道了分类号
查询数据库,凡是父类号为这个分类号的就是他的子分类了
点击了分类,于是就知道了分类号
查询数据库,凡是父类号为这个分类号的就是他的子分类了
我不是要子分类 我是要 所有子分类下面的产品
奇怪了,有了子分类号,还愁子分类下面的产品吗?
不知道你数据量大不大
小企业站的话,得到父分类ID后,查到所有子分类ID,然后合并到一起:2,5,6,7,8这种
再到产品表sql语句用in关键字查出来,怎么用,搜一下吧...
不清楚in能不能用到索引?
如果数据量比较大,就用冗余换效率
给分类表加一个floor字段,父分类就写0,1级子分类就写1,2级子分类写2。。。
假设你有3层分类,那么在产品表加3个字段,cate,cate1,cate2
产品属于哪个子分类,就把从父到2级子 3个字段都填满
筛选时根据传入的cateid,先查出这个分类的floor,然后查出他的所有上级分类id
剩下就是把所有得到的id作为条件筛选了
这里有个关键,要建一个BTREE索引,以cate到cateN的顺序都包括进来
同数据量方法2要快很多,但他的缺点是子分类移动时还要改产品表
奇怪了,有了子分类号,还愁子分类下面的产品吗?
这里还涉及到子分类的子分类 是所有后代分类,所以我最先想到的就是 递归
如果单单是一层子分类当然好办了,可是无限极分类,子分类层数个数都未知
我想到了一个方案了
不知道你数据量大不大
小企业站的话,得到父分类ID后,查到所有子分类ID,然后合并到一起:2,5,6,7,8这种
再到产品表sql语句用in关键字查出来,怎么用,搜一下吧...
不清楚in能不能用到索引?
如果数据量比较大,就用冗余换效率
给分类表加一个floor字段,父分类就写0,1级子分类就写1,2级子分类写2。。。
假设你有3层分类,那么在产品表加3个字段,cate,cate1,cate2
产品属于哪个子分类,就把从父到2级子 3个字段都填满
筛选时根据传入的cateid,先查出这个分类的floor,然后查出他的所有上级分类id
剩下就是把所有得到的id作为条件筛选了
这里有个关键,要建一个BTREE索引,以cate到cateN的顺序都包括进来
同数据量方法2要快很多,但他的缺点是子分类移动时还要改产品表
我用的是无限极分类,子分类层次不一定的,子分类下面可能还有子分类,所以我最先想到的是递归,后来觉得要从数据库设计入手,就在分类表加了一个路径字段
如果你一开始是全部取出的话,那么就不存在“点击一个分类,把当前分类及其所有子分类的所有产品列出来”这么一说了
既然是点击才出来,那自然是出来的是一级子分类,再点再出。这样才是统一的风格
就是你一次性全取出来,也是按父分类指示的一级一级的读
不需要递归啊,你可以到上面一个表里“层次结构”那个字段里面找所点击分类的分类号,凡是有的都是子孙后代分类了。
比如说点击的分类,id号为18,就可以用cate_path like "%18-%" or cate_path like "%-18%"来筛选。
无限级这么关键的词你居然没说!
我觉得思路还是4楼的第二种方法,把欲查询的cateid的所有父分类id也都折腾出来,合并到一起去查
用 , 或者 - 应该都可以吧
产品的cateid字段保存这样的格式:1,5,8,21 是从1级分类到N级分类
如果想查cateid=8的所有产品,那先找出5和1这2个上级分类,生成字符串1,5,8
然后查询语句用 cateid like '$cateid %',当然这个字段单独加个索引
补充下
如果想查cateid=8的所有产品,那先找出5和1这2个上级分类,生成字符串1,5,8
这一步的字符串可以写在数据库中,也可以把所有分类id对应的查询字符串缓存起来,实际运行时间可以跳过了^ ^
我觉得你的筛选方式会出问题的。如果是id为8的呢?"%8%"这样的表达式会把18或者81、82等等都包含进去的。
这个方法再把表达式改一下就好了啊。如果id为0的也可能被点击到的话,最后in里面除了搜索出来的之外,就得多包含一个当前点击的id自己。否则都不需要加别的了,因为只有0才会前后都不带“-”出现。
无限级这么关键的词你居然没说!
我觉得思路还是4楼的第二种方法,把欲查询的cateid的所有父分类id也都折腾出来,合并到一起去查
用 , 或者 - 应该都可以吧
产品的cateid字段保存这样的格式:1,5,8,21 是从1级分类到N级分类
如果想查cateid=8的所有产品,那先找出5和1这2个上级分类,生成字符串1,5,8
然后查询语句用 cateid like '$cateid %',当然这个字段单独加个索引
用-还是用,没有区别啊,而且也不需要查找父分类。
这个简单。就一直查询下去。
由主分类ID查询出子分类,又从子分类ID查询出第三级,又从第三级ID查询出第四级……
当然,你的服务器能经得起这样折腾才行。
不管你是不是无限级,都是这样的查询。没有捷径可走。
这个简单。就一直查询下去。
由主分类ID查询出子分类,又从子分类ID查询出第三级,又从第三级ID查询出第四级……
当然,你的服务器能经得起这样折腾才行。
不管你是不是无限级,都是这样的查询。没有捷径可走。
他有一个cate_path字段啊,不需要这样的。
这个方法再把表达式改一下就好了啊。如果id为0的也可能被点击到的话,最后in里面除了搜索出来的之外,就得多包含一个当前点击的id自己。否则都不需要加别的了,因为只有0才会前后都不带“-”出现。
兄台想的果然周全 180 也包含18,确实是要加杠杠
刚在公司没时间细看
你们讨论的是在分类上加path,然后查询产品的sql语句用in?
无限级分类用in那效率会不会...in一大堆ID
还好in可以用到索引,不知道mysql有没有为in排序,否则索引树要从头到底遍历一次,然后复杂度还要乘以id的个数
我在4楼和10楼说的都是加速查询的方案
只是实现的话怎么都有办法
获得cateid后从内存缓存中(编辑分类时一次性生成)用php的变量hash读取他的分类路径,这一步几乎不耗时间
然后直接用路径字符串借助索引树一次性定位到全部数据集,速度很快
很抱歉天气热有点浮躁,如果有错误请指正

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











iOS 17에서는 시계 앱을 사용하여 iPhone에 여러 개의 타이머를 설정하거나 Siri를 사용하여 핸즈프리로 설정할 수 있습니다. 이 기사에서는 두 가지를 모두 논의합니다. 그것들을 살펴보자. 시계 앱을 사용하여 iPhone에서 여러 타이머 설정 iPhone에서 시계 앱을 열고 오른쪽 하단에 있는 타이머 탭을 탭하세요. 이제 시간, 분, 초를 설정하세요. "라벨" 및 "타이머 종료 시간" 옵션을 사용하여 타이머 이름과 타이머 완료 시 선호하는 신호음을 설정할 수 있습니다. 이렇게 하면 타이머를 구별하는 데 도움이 됩니다. 완료되면 "시작"버튼을 클릭하십시오. 그런 다음 오른쪽 상단에 있는 "+" 아이콘을 클릭하세요. 이제 위 단계를 반복하여 iPhone에 여러 타이머를 설정하세요. 탐색할 수도 있습니다.

JSP 주석 분류 및 활용 분석 JSP 주석은 두 가지 유형으로 구분됩니다. 한 줄 주석: 로 끝나는 코드로 한 줄만 주석을 달 수 있습니다. 여러 줄 주석: /*로 시작하고 */로 끝나는 경우 여러 줄의 코드에 주석을 달 수 있습니다. 한 줄 주석 예 여러 줄 주석 예/**여러 줄 주석입니다*여러 줄의 코드에 주석을 달 수 있습니다*/JSP 주석 사용 JSP 주석을 사용하여 JSP 코드에 주석을 달면 읽기 쉬워집니다.

iOS17의 iPhone에서 GroceryList를 만드는 방법 미리 알림 앱에서 GroceryList를 만드는 것은 매우 간단합니다. 목록을 추가하고 항목으로 채우면 됩니다. 앱은 자동으로 항목을 카테고리별로 분류하며, 파트너나 플랫 파트너와 협력하여 매장에서 구매해야 할 항목의 목록을 만들 수도 있습니다. 이를 위한 전체 단계는 다음과 같습니다. 1단계: iCloud 미리 알림 켜기 이상하게 들리겠지만 Apple에서는 iOS17에서 GroceryList를 생성하려면 iCloud에서 미리 알림을 활성화해야 한다고 말합니다. 단계는 다음과 같습니다. iPhone의 설정 앱으로 이동하여 [사용자 이름]을 탭하세요. 다음으로 i를 선택하세요.

제품 매개변수는 제품 속성의 의미를 나타냅니다. 예를 들어 의류 매개변수에는 브랜드, 소재, 모델, 크기, 스타일, 직물, 적용 그룹, 색상 등이 포함됩니다. 식품 매개변수에는 브랜드, 중량, 재료, 건강 허가 번호, 적용 그룹, 색상 등이 포함됩니다. 브랜드, 크기, 색상, 원산지, 적용 가능한 전압, 신호, 인터페이스 및 전원 등이 포함됩니다.
![iPhone의 연락처에 내 명함을 설정하는 방법 [2023]](https://img.php.cn/upload/article/000/465/014/169538863364905.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
iOS의 내 명함을 사용하면 Siri 및 기타 서비스에서 귀하와 귀하의 전화번호를 인식하고 연결할 수 있는 개인화된 연락처 카드를 만들 수 있습니다. iOS17에 연락처 포스터가 도입되면서 내 카드는 이제 연락처 포스터를 만드는 데 사용되므로 매우 중요해졌습니다. 연락처 포스터를 만들고 실행하려면 내 명함 설정부터 시작해야 합니다. 내 명함을 만드는 방법과 그것이 Siri 및 연락처 포스터와 원활하게 작동하도록 만드는 방법을 살펴보겠습니다. iPhone 연락처에서 내 명함을 설정하는 방법 [2023] iPhone에서 처음으로 내 명함을 설정하는 경우 연락처 앱을 통해서만 설정해야 합니다.

Xiaomi 14Ultra가 출시된 후 사진 촬영을 좋아하는 많은 친구들이 주문을 선택했습니다. Xiaomi 14Ultra는 사진 거울 기능과 같은 더 많은 선택 사항을 제공하며 "사진 거울 회전" 기능을 켜도록 선택할 수 있습니다. 이런 식으로 사진을 찍을 때 익숙한 방식으로 셀카를 찍을 수 있습니다. 그런데 샤오미 14Ultra는 카메라 미러를 어떻게 설정해야 할까요? Xiaomi Mi 14Ultra에서 카메라 미러링을 설정하는 방법은 무엇입니까? 1. Xiaomi 14Ultra의 카메라를 엽니다. 2. 화면에서 "설정"을 찾습니다. 3. 이 페이지에는 "캡처 설정"이라는 옵션이 표시됩니다. 4. 이 옵션을 클릭한 다음 드롭다운 메뉴에서 "Photo Mirror" 옵션을 찾으세요. 5. 그냥 열어보세요. 샤오미 14U
![iPhone에서 알람을 끄는 방법 [2023]](https://img.php.cn/upload/article/000/465/014/169259550735100.png?x-oss-process=image/resize,m_fill,h_207,w_330)
스마트폰이 등장한 이후 스마트폰은 의심할 여지없이 알람시계를 대체해 왔습니다. iPhone을 소유하고 있다면 시계 앱을 사용하여 하루 종일 여러 상황에 대해 원하는 만큼의 알람을 쉽게 설정할 수 있습니다. 이 앱을 사용하면 알람 시간, 신호음, 반복 빈도, 스누즈 옵션을 사용하여 알람을 지연할지 여부를 구성할 수 있습니다. 설정한 알람을 끄고 싶다면 다음 게시물을 참조하여 iPhone에서 일반 알람과 모닝콜 알람을 비활성화하고 삭제하는 데 도움이 될 것입니다. iPhone에서 일반 알람을 끄는 방법 기본적으로 시계 앱에 알람을 추가하거나 Siri에게 알람 추가를 요청하면 실제로 일반 알람이 생성됩니다. iPhone에서 원하는 만큼의 알람 시계를 만들고 추가할 수 있습니다.

iOS17이 마침내 출시되었으며, 여기에는 많은 새로운 기능이 포함되어 있습니다. 오늘의 튜토리얼에서는 iPhone에서 연락처 사진을 변경하는 방법을 알아 보겠습니다. Apple의 최근 WWDC 2023 이벤트에서는 수많은 흥미로운 제품과 향후 소프트웨어 업데이트가 공개되었습니다. iOS 17의 주목할만한 기능 중 하나는 연락처 사진과 포스터를 맞춤 설정하는 옵션으로, 상대방이 iPhone에서 전화를 받을 때 인사할 수 있는 독특한 방법을 제공합니다. iOS를 위한 이 혁신적인 기능은 전화 통화를 보다 개인적이고 사용자 친화적으로 만들기 위해 설계되었으며, 수신자의 화면에 표시되는 방식을 선택할 수 있습니다. 이 새로운 기능을 직접 사용해 보고 전화를 걸 때 사랑하는 사람에게 개인화된 방식으로 인사하고 싶다면 iPhone에 이 기능을 추가하는 방법은 다음과 같습니다.
