mysql - 使用类别和子类别表进行查询
问题描述
我有一个我正在尝试做的 PHP MySQL 查询......它有一个包含类别和子类别的项目列表。我想按字母顺序对列表进行排序,但列表中有类别(及其包含的项目)。例如...
一共有三个表...一个类别表(itemcats)...
> itemcat catname
> 1 AGeneralCategory
> 2 Food
> 3 Clothing
一个子类别表(itemsubcats)和一个父类别的列(itemcat)...
> itemsubcat itemcat subcatname
> 1 2 Fruit
> 2 2 Vegetables
> 3 2 Meat
> 4 3 Shoewear
> 5 3 Hats
然后是单个项目(项目)的表格......
> itemid itemname itemcat itemsubcat
> 1 Apples 2 1
> 2 Sneakers 3 4
> 3 Onion 2 2
> 4 Banana 2 1
> 5 Steak 2 3
> 6 Sombrero 3 5
> 7 Sandals 3 4
> 8 Jeep 1 null
> 9 Baseball Cap 3 5
> 10 Mountain 1 null
> 11 Bread 2 null
> 12 Veggiemite 2 null
和想要的结果。注意:我可能可以使用 PHP 添加类别/子类别名称,但我需要按如下顺序排列的单个项目列表...
> [AGeneralCategory]
> Jeep
> Mountain
> [Clothing]
> [Headwear]
> Baseball Cap
> Sombrero
> [Shoewear]
> Sandals
> Sneakers
> [Food]
> Bread
> [Fruit]
> Apple
> Banana
> [Meat]
> Steak
> Veggiemite
> [Vegetables]
> Onion
到目前为止,我已经尝试了一些 JOINS ......但似乎无法获得预期的结果......这是我目前拥有的......
SELECT a1.itemid iid, a1.itemname iname, a1.itemcat icat, a1.itemsubcat isub
FROM items a1
LEFT
JOIN itemcats b1
ON a1.itemcat = b1.itemcat
LEFT
JOIN itemsubcats c1
ON a1.itemsubcat = c1.itemsubcat
ORDER
BY a1.itemcat, a1.itemsubcat
更新:这是决赛,似乎效果很好....
SELECT a.itemid,
a.itemname,
a.itemcost,
a.itemcostcoin,
a.itemweight,
a.itemdesc,
a.itemcat,
b.catname,
a.itemsubcat,
c.subcatname
FROM (SELECT
itemid,
itemcat,
itemsubcat,
itemname,
itemcost,
itemcostcoin,
itemweight,
itemdesc
FROM items
UNION SELECT itemsubcat,
NULL AS itemcat,
NULL AS itemsubcat,
subcatname,
NULL AS itemcost,
NULL AS itemcostcoin,
NULL AS itemweight,
NULL AS itemdesc
FROM itemsubcats)
AS a
LEFT JOIN itemcats b ON a.itemcat=b.itemcat
LEFT JOIN itemsubcats c ON a.itemsubcat=c.itemsubcat
WHERE a.itemcat='1'
解决方案
您需要通过子句更正您的订单,并使用类别和子类别的名称而不是它们的 ID
SELECT
b1.catname as catname,
c1.subcatname as subcatname ,
a1.itemid as iid,
a1.itemname as iname
FROM items a1
LEFT JOIN itemcats b1 ON a1.itemcat=b1.itemcat
LEFT JOIN itemsubcats c1 ON a1.itemsubcat=c1.itemsubcat
ORDER BY b1.catname, c1.subcatname
对于树视图,您可以在应用程序层 (PHP) 中转换此数据
推荐阅读
- android - Android Room 是否等待 withTransaction 块完成后再继续下一行
- laravel - 我在将 licenseController 中的 show.blade 中的数据重定向或传递到 laravel 8 中的 FronendController 索引页面时遇到困难
- azure-devops - Azure DevOps - 无法使用 Azure DevOps API 和身份验证令牌创建 Var 组
- php - eks 集群中的缓慢 wordpress
- reactjs - React - API 数据仅在我手动刷新页面时显示
- html - 在 PHP 日志中找不到 favicon-96x96.png 错误的路由
- php - Laravel $request->input() 正在获取 url 路径以及查询参数名称
- kubernetes - 如何使用脚本增加 Kubernetes 集群中的有状态应用程序的负载
- tesseract - 用tesseract识别淡线
- github-cli - 如何捕获 github-cli pr 列表