- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取一个包含三个表中的信息的数组。结果应该是一个数组,我可以在其中循环遍历第一个表、第二个表中的相关行以及第三个表到第二个表中的相关行。目前,我有三个独立的 SQL 查询,然后将它们重组为一个数组。
也许有人可以帮助我了解查询这些表以获取下面的数组的最佳方法。我目前收到三个查询 - 每个表一个。使用 mysql JOIN,这是一个非常简单的查询,但我在将其排列回数组时遇到问题。
我正在考虑使用 mysql JOIN 以更少的查询获得相同的结果,但实际上我想知道这是否那么好甚至可能。我将在表格的大致大小中添加数字。
让我给你一些细节:
表格
courses(4000 rows)
course_id----course_date
groups(50 000 rows)
group_id----group_size----group_course_id
users(200 000 rows)
user_id----user_name----user_group_id
所需数组的示例:
[0] => Array('courseinfo' =>
Array('course_id' => 1234,
'course_date' => '2012-08-12')
'groups' =>
Array( [0] => Array('group_id' => 345,
'group_size' => 3,
'group_course_id' => 1234,
'users' => Array([0] => Array('user_id' => 456,'user_name' => Pete Cabrinha, 'user_group_id = '345'),
[1] => Array('user_id' => 336,'user_name' => John Smith, 'user_group_id = '345'))
[1] => Array('group_id' => 345,
'group_size' => 3,
'group_course_id' => 1234,
'users' => Array([0] => Array('user_id' => 456,'user_name' => Pete Cabrinha, 'user_group_id = '1234'),
[1] => Array('user_id' => 336,'user_name' => John Smith, 'user_group_id = '1234'))))
希望不要太复杂,只需注意 course_id 和 group_course_id 之间的关系以及 group_id 和 user_group_id 之间的关系即可。
这是我目前查询方式的一小段:
$data = $courses = $read->read_courses();
$i = 0;
foreach($courses as $course)
{
if($data[$i]['groups'] = $read->read_groups($course['course_id']))
{
$j = 0;
foreach($data[$i]['groups'] as $group)
{
$data[$i]['groups'][$j]['users'] = $read->read_users($group['group_id']);
$j++;
}
}
else {$data[$i]['groups'][0] = array(); $data[$i]['groups'][0]['users'] = array();}
$i++;
}
最后我想到使用 JOIN...
SELECT
course.course_id,
course.course_date,
groups.group_id,
groups.group_course_id,
groups.group_size,
user.user_name
FROM course
LEFT JOIN groups
ON course.course_id = groups.group_course_id
LEFT JOIN user
ON groups.group_id = user.user_group
希望有人可以在这里帮助我,或者让我走上正确的方向 - 甚至想出一个更好的主意。
最佳答案
正如您在答案中看到的那样,有多种方法可以执行该查询,但您永远不应该将整个数据库加载到 PHP 数组中。根据您的评论,您一次需要一个月,因此添加一个 WHERE 子句将结果限制为您想要的月份。
例如:
SELECT ...
FROM ...
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
这将为您提供过去 30 天的信息。
或者,您可以使用 LIMIT 一次仅显示一定数量的记录:
LIMIT 0, 100
将为您提供从偏移量 0 开始的 100 条记录(前 100 条记录)。它使分页变得更容易。
如果您想首先获得最新的类(class),请使用 ORDER BY:
ORDER BY course.course_date DESC
LIMIT 0, 100
然后,您只需更改每个查询的限制即可获取下一批要显示的记录,当然,您的查询将非常快并且占用很少的内存,因为您下载的记录永远不会超过 100 条。
<小时/>抱歉,听起来您正在用 PHP 进行数据库工作。
到底为什么要在 PHP 数组中加载 254k 条目?您不会在单个页面上显示 254k 条记录,是吗?性能将是可怕的,只有少数用户就会使您的服务器崩溃。
您确实应该重新考虑您真正需要哪些数据以及如何使用它们。
你想做什么?您需要什么数据?如何从数据库服务器获取它?
关于php - 更快/更轻松地查询此结果数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397505/
我有一个功能是转换 ADO Recordset 进入html: class function RecordsetToHtml(const rs: _Recordset): WideString; 该函
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史here) 当用户访问时,我运行此代码: $entropy=sha1(microtime().$pepper.$_SERVE
给定一个无序列表 List ,我需要查找是否存在 String与提供的字符串匹配。 所以,我循环 for (String k : keys) { if (Utils.keysM
我已经搜索过这个问题,但没有找到我正在寻找的答案。 基本上,我想将类构造函数包装在 try/except 子句中,以便它忽略构造函数内特定类型的错误(但无论如何都会记录并打印它们)。我发现做到这一点的
我有一组三个数字,我想将一组数字与另一组数字进行比较。即,第一组中的每个数字小于另一组中的至少一个数字。需要注意的是,第一组中的下一个数字必须小于第二组中的不同数字(即,{6,1,6} 对 {8,8,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
首先介绍一下背景: 我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一
我正在尝试在我的上网本上运行 Eclipse 以便能够为 Android 进行开发。 您可能已经猜到了,Eclipse 非常慢,并且不容易有效地开发。 我正在使用 Linux Ubuntu 并且我还有
for row, instrument in enumerate(instruments): for col, value in enumerate(instrument):
return not a and not b ^ 我如何以更好的格式表达它 最佳答案 DeMorgan's Law , 也许? return not (a or b) 我认为在这一点上已经足够简单了
我正在尝试让 Font Awesome 图标看起来更 slim https://jsfiddle.net/cliffeee/7L6ehw9r/1/ . 我尝试使用“-webkit-text-strok
假设我有一个名为 vals 的数据框,如下所示: id…………日期…………min_date…… .........最大日期 1…………2016/01/01…………2017/01/01…………2018/
是否有更 Pythonic 的方式来做到这一点?: if self.name2info[name]['prereqs'] is None: se
我有一个函数可以将一些文本打印到它接收到的 ostream&。如果 ostream 以终端为目标,我想让它适应终端宽度,否则默认为某个值。 我现在做的是: 从 ostream 中获取一个 ofstre
这个问题在这里已经有了答案: Should a retrieval method return 'null' or throw an exception when it can't produce
我有这个 bc = 'off' if c.page == 'blog': bc = 'on' print(bc) 有没有更 Pythonic(和/或更短)的方式在 Python 中编写? 最佳
输入:一个包含 50,000 行的 CSV;每行包含 910 列值 0/1。 输出:运行我的 CNN 的数据框。 我编写了一个逐行读取 CSV 的代码。对于每一行,我将数据分成两部分,称为神经元(90
据我所知,with block 会在您退出 block 后自动调用 close(),并且它通常用于确保不会忘记关闭一个文件。 好像没有技术上的区别 with open(file, 'r+') as f
我有一个使用 Entity Framework V6.1.1 的 MVC 5 网站。 Entity Framework DbContext 类和模型最初都在网站项目中。这个项目有 3 个 DbCont
我是编程新手,在尝试通过将 tableView 和关联 View 的创建移动到单独的类并将委托(delegate)和数据源从 VC 移动到单独的类来精简我的 ViewController 时遇到了一些
我是一名优秀的程序员,十分优秀!