我正试图编写一个快速脚本,只查询一次MSSQL表,然后在我的端组织响应,这样我就不必一直查询mysql的数据。
很难解释,但我想到的是在一个查询中抓取我需要的一切,然后将每一行组织成一个数组,然后将该数组放入另一个包含所有内容的数组,然后我可以从中提取数据。
我已经得到了什么:
$allInclusiveArray = [];
$sumRecords = mssql_num_rows($result);
for ($i = 0; $i < $sumRecords; ++$i) {
//get key values for array
echo $value1= mssql_result($result, $i, 'key1');
echo $value2= mssql_result($result, $i, 'key2');
echo $value3= mssql_result($result, $i, 'key3');
echo $value4= mssql_result($result, $i, 'key4');
$tempArray = [
"key1" => $value1,
"key2" => $value2,
"key3" => $value3,
"key4" => $value4
];
array_push($allInclusiveArray, $tempArray);
}
的最终结果将是一个数组,看起来像:
$allInclusiveArray = [
[array with keys and values],
[array with keys and values],
[array with keys and values]
];
我想知道的是,如果有一种方法来查询这个数组来抓取与一个键相关的所有值,其中另一个键有一个固定的值。在mssql中,它看起来像SELECT key1 FROM table WHERE key2 = value2
一种可能是执行for循环,然后运行and if语句检查键和值是否匹配,例如:
for (i in length of array) {
if (the array located at i has key2 equaling value2) {
select the value of key1 from the array at this index
}
}
编辑:我最终在MSSQL这边做了大部分的排序。我这边有一个工作的PHP脚本来对批量数据进行排序,但是即使处理20,000条记录也要花很长时间。
像这样?
下面是一个例子:https://3v4l.org/MrqvI
function arrayQuery($array, $key, $match){
foreach($array as $row){
if(array_key_exists($key, $row) && $row[$key] == $match) return $row;
}
return $false;
}
如果需要更多的功能,可以很容易地扩展成一个完整的类
这是我昨天写的一篇关于这个话题的博文。
底线是Doctrine
具有具有类似SQL
语义的可查询ArrayCollections
(Criteria
类似于ORM查询构建器)。
参考资料在这里。如果你使用composer,你可以要求项目中的库直接使用它。
它通常与ORM或ODM结合使用,以过滤(部分加载)大型关系(这就是本文所介绍的内容)。