PHP/MySQL排序多维数组
我想把一个数组分成三个深度的数组。这是我当前的查询:PHP/MySQL排序多维数组,php,mysql,arrays,sorting,Php,Mysql,Arrays,Sorting,我想把一个数组分成三个深度的数组。这是我当前的查询: SELECT * FROM question INNER JOIN category ON question.category_id = category.id INNER JOIN difficulty ON question.difficulty_id = difficulty.id 预期结果如下: array( '1' => array( // category id 1 '1' => arra
SELECT * FROM question
INNER JOIN category ON question.category_id = category.id
INNER JOIN difficulty ON question.difficulty_id = difficulty.id
预期结果如下:
array(
'1' => array( // category id 1
'1' => array( // difficulty id 1
'1' => array('...'), // question id 1
'2' => array('...') // question id 2
),
'2' => array(
'3' => array('...'),
'4' => array('...')
)
)
)
我确实有以下几点:
foreach($categories as $category) {
foreach($difficulties as $difficulty) {
foreach($questions as $question) {
if ($question['category_id'] == $category['id'] && $question['difficulty_id'] == $difficulty['id']) {
$feed[$category['id']][$difficulty['id']][$question['id']] = $question;
}
}
}
}
但是会有10000多个问题,性能会很差,所以有没有一种方法可以通过一个查询和更少的循环来实现这一点?基本上,您只需返回查询并按ID排序,如下所示:
Category_ID Difficulty_ID Question_ID
0 0 0
0 0 1
1 0 2
1 3 3
1 3 4
2 0 5
2 1 6
然后在一段时间内解析所有内容:
key: unique table prefix + id
value: columns (delimited with the delimiter defined before)
一次返回整个表的最简单方法是定义第二个分隔符,然后使用以下形式的稍微难看的查询:
SELECT id||delimiter||col1||delimiter||...||colN FROM ...
然后使用第二个分隔符(group\u concat()
在mysql中)将其与列表聚合放在一起如果数据不是太大,并且在登录后没有更改,那么您可以使用应用程序缓存并在脚本标记中回显您的内容。似乎不太可能需要将这三个表中的所有数据转储到php中进行处理。您可能应该在数据库中做更多的数据处理工作,而不是在php中。基本上,我的目标是实现所有按相关类别和困难排序的问题数据。那么,更新来得太晚了。什么目的?在本地存储中存储(通过ajax调用检索)用于脱机应用程序还是仅显示?这是一个ajax请求,然后我对数据集进行json编码并将其返回到我的应用程序以用于本地存储。好的,我添加了mysql特定信息以及如何在本地存储中构建结构,但我不擅长json