我需要加快一个SQL查询。或者更好地处理php代码。搜索数据库并在前端显示结果时的一些最佳实践。
基本上我有三张桌子 - 包含记录的方框 - 包含歌曲的记录 - 歌曲
我希望我的前端代码列出如下内容:
Box 1
-Record 1
--Song 1
--Song 2
etc....
-Record 2
--Song 1
--Song 2
etc....
Box 2
-Record 1
--Song 1
--Song 1
etc. etc. etc.
“我的方式”非常耗时:
由于选择的电话数量巨大(很多箱子,很多都是),所以需要很长的时间才能完成。
我想有一种更简单的方法(从服务器的尖端视图)来做同样的事情。将dato拉到php数组以及那里的逻辑或其他聪明的东西。
问题: 使用php从关系数据库获取数据的最佳实践是什么?
溴。安德斯
答案 0 :(得分:3)
您需要了解JOIN
s。在这里,您将使用两个外连接。这样,只使用一个选择查询就可以获得相同的结果,PHP和MySQL必须完成的工作量要少得多。
您的SQL看起来像这样:(请注意,我使用SELECT *
作为真实列列表的替身,因为我不知道您拥有哪些列 - 使用SELECT *
通常不是一个好主意)
SELECT
*
FROM
Box
LEFT JOIN Record ON Box.BoxID = Record.BoxID
LEFT JOIN Song ON Record.RecordID = Song.RecordID
答案 1 :(得分:2)
基于单一集合的选择操作将比许多基于单行的选择更快。
使用连接实现此目的 见:http://en.wikipedia.org/wiki/Join_(SQL)
我不知道你的数据库结构,所以这不是一个有效的例子, 这里是如何返回特定盒子的所有歌曲。
SELECT s.* FROM box b
INNER JOIN record r ON r.box_id = b.box_id
INNER JOIN song s ON s.record_id = r.record_id
WHERE box.name = 'mybox'
会比以下更快:
select from box b
where box.name = 'mybox'
LOOP
select record_id from record
LOOP
select * from song
END
END