Php 从数据库获取数据的最有效方法

Php 从数据库获取数据的最有效方法,php,mysql,Php,Mysql,所以我所拥有的很简单。 我有一张桌子 分类码 像 猫科 猫名 表1: 分类sub 像 卡提德 猫名 猫科 " 我想要的是: 包含所有CATMain名称和名称下所有CATSubName的列表 CatMainId1 具有CatMainId1的所有CatSubNames CatMainId2 具有CatMainId2的所有CatSubNames 等等 目前我使用php来获取数据,如 SELECT * from Categoriemain 而在while循环中,我是这样做的 SELECT * FR

所以我所拥有的很简单。 我有一张桌子

分类码

猫科

猫名

表1:

分类sub

卡提德

猫名

猫科

"

我想要的是:

包含所有CATMain名称和名称下所有CATSubName的列表

CatMainId1

具有CatMainId1的所有CatSubNames

CatMainId2

具有CatMainId2的所有CatSubNames

等等

目前我使用php来获取数据,如

 SELECT * from Categoriemain
而在while循环中,我是这样做的

 SELECT * FROM CategorieSub WHERE CatMain id = $row['CatMainId']
但这是非常低效的,因为现在如果我有10个CatMainId,我会为每个ID做10个查询

获取这样的列表最有效的方法是什么,我曾考虑将其放入数组或其他东西中,但无法使其正常工作?

使用一个查询:

SELECT Categoriemain.*, CategorieSub.CatSubNames FROM Categoriemain
JOIN CategorieSub ON Categoriemain.CatMainid=CategorieSub.Catmainid
按组编辑、删除

使用此查询,您不需要while循环


我还将CatSubNames添加到查询字段的输出列表中。

+1用于在while循环中实现查询是一件坏事:您想了解SQL JOIN。网络上肯定会有一些好的教程。好的,但是我如何在while循环中选择CatMainName下的正确分类sub我可以通过while$row=$result->fetch_assoc{echo$row['CatMainName'];}获取CatMainName,其中包含存储当前主分类的变量,然后你做一个检查,看看这个类别是否有变化,如果有,你只需创建一个新的Html节或标题,并给变量一个新的值,只是一个建议,如果这可以用SQL来做会更好,有什么建议吗?可以通过一个窗口函数来抑制行的重复部分——但我不确定mysql中是否有这种功能——在Oracle和其他软件中是肯定的。我认为删除显示代码中不需要的重复最容易,因为@Hosea Kambonde suggestsOkay,通过删除组。如果您想更清楚地了解您的输出,还可以添加一个ORDER BY,如@Randy所示。
SELECT * FROM Categoriemain
JOIN CategorieSub ON Categoriemain.CatMainid=CategorieSub.Catmainid
ORDER BY Categoriemain.CatMainid