作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个表需要显示数据。
Schools
-------
id | Title
Programs
--------
id | descr | title | type | school.id
当然,这不是最好的设置,但我对数据库结构无能为力。
我需要创建一个列表,按学校、项目和项目类型分隔。现在,我有一个巨大的嵌套循环(伪代码):
Select * from Schools
For Each School
print $school_header;
Select Program Type from Programs WHERE School.id = $school_id
For Each Program type
print $type_header;
Select * from Programs where School.id = $school_id and type = $program_type
For Each Program
print $program_link;
不用说,这是一团糟。
最终结果是一个列表:
有没有一种方法可以通过更少的查询和更少的数据库密集型代码来做到这一点?
最佳答案
这里真正的问题不在于一种或另一种编程语言是否更高效。性能上的巨大差异是由于数据局部性造成的,即在数据库本身上执行查询不需要您通过网络来回移动所有数据以进行评估,而 PHP 解决方案则需要。
对于您的查询,您想要做的是编写一个存储过程,它返回多个结果集(用于进一步加入 PHP)或一个大型结果集(通过加入 SQL)。我的猜测是它看起来像:
SELECT S.Title as School_Title, pt.title as Program_type_title, p.title as Program_Title
FROM School S
INNER JOIN ProgramType pt on s.id = pt.school_id
INNER JOIN Program p on pt.id = p.program_type_id
ORDER BY S.Title, pt.title, p.title
这将为您提供大型矩形阵列,按每个标题的优先顺序排列。通过这种方式,您可以遍历行,直到您看到学校标题发生变化、程序类型标题发生变化或其他任何变化,并呈现适当的结束标记。
关于php - 哪个效率更高 : a SQL JOIN or nested PHP loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208755/
我是一名优秀的程序员,十分优秀!