- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一种算法来从数据库中生成项目组合。它们需要是唯一的排列(即 145、156 == 156、145)。我遇到的问题是如何跟踪以前的组合,这样我就不会以 145、156 和 156、145 结束。
目前我正在将它们添加到索引为 id1_id2 的数组中...(排序以便 id 始终从最低到最高)并在生成组合时将值设置为 1,以便我可以检查 $combos[ $index] 是否存在。如果它不存在,请创建它。 (还有其他标准可以剔除每个排列,但它们无关紧要)生成这些组合后,它们将存储在 MySQL 的表中。
我遇到的问题是,对于我正在使用的测试项目(大约 85 个),我无法在不耗尽内存的情况下生成超过 3 个项目(id1_id2_id3)的组合,因为组合的数量是巨大的,而且$combos 数组占用的空间超过了我在 PHP 内存中分配的 64M。
有没有一种方法可以让我做到这一点 a) 无需跟踪以前的组合或 b) 跳过 $combos 数组路由并只向 mysql 添加一个唯一行并让 mysql 处理重复检查。
下面是一些伪代码供引用:
$items = array(/*85 items*/);
foreach ($items as $item1){
generate(array($item1));
foreach($items as $item2){
generate(array($item1, $item2));
}
}
}
function generate($items_arary){
$temp_array = array();
foreach ($items_array as $item){
$temp_array[] = $item['id'];
}
sort($temp_array);
$index = implode("_", $temp_array);
if (!$combos[$index]){
$combos[$index] = 1;
/* some code to generate query to store to db */
}
}
查询最终看起来像这样:(数据库在脚本开头被截断)
INSERT INTO `combos` (combo_id, more_info) VALUES ('id1_id2', 'Item Name');
在写这道题的过程中,我想到了一个可能的解决方案:确保id3 > id2 > id1。这是否是消除对 $combos 需求的可行解决方案?
最佳答案
我问之前数据结构的原因是因为你可以做这样的事情:
$sql = "SELECT id FROM test_a";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
$item1 = $row['id'];
$sql2 = "SELECT id FROM test_a";
$result2 = mysql_query($sql2);
while ($row2 = mysql_fetch_array($result2)) {
$item2 = $row2['id'];
$combo1 = $item1 . "_" . $item2;
$combo2 = $item2 . "_" . $item1;
$sql3 = "SELECT * FROM combos WHERE combo_id = '$combo1' OR combo_id = '$combo2'";
$result3 = mysql_query($sql3);
if (mysql_num_rows($result3) == 0) {
$sql4 = "INSERT INTO combos (combo_id, more_info) VALUES ('$combo1','Item Name')";
$result4 = mysql_query($sql4);
}
}
}
当表 test_a 的值为 1、2、3 和 4 时,此脚本将插入:1_11_21_31_42_22_32_43_33_44_4
这应该不会有任何内存问题。尽管如果你有一个庞大的数据库,你可能会遇到 php 的时间限制问题
关于php - 在 php 中生成独特的组合而不会耗尽内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207856/
对于 Prometheus 指标集合,如标题,我真的找不到只能通过 type Summary 完成的用例。 ,似乎它们都可以通过 type Histogram 以某种方式完成还。 让我们以请求并发度量
这个问题在这里已经有了答案: Ignore case while using duplicated (1 个回答) 关闭 9 个月前。 使用不区分大小写的 unique(tolower(x)) 删除
应用程序监控服务的一个有用功能是每次发生新的、独特的错误/问题/异常时发送警报(例如电子邮件)(即不是每次发生)。要么只是第一次,要么最多每次 X 次(一天或一周等)。例如,这可以通过 Visual
应用程序监控服务的一个有用功能是每次发生新的、独特的错误/问题/异常时发送警报(例如电子邮件)(即不是每次发生)。要么只是第一次,要么最多每次 X 次(一天或一周等)。例如,这可以通过 Visual
我想要相当于 DB2 中 MySql 的 GROUP_CONCAT 功能。 我尝试过 DB2 的 XML Aggrigate 函数来合并 murows。 SELECT a.ID, sub
我正在运行 python 数据库迁移脚本 (Flask-Migrate) 并添加了 alembic.ddl.imp import DefaultImpl 来解决第一组错误,但现在我收到以下错误。我正在
我有一个逗号分隔的文件“myfile.csv”,其中第 5 列是日期/时间戳。 (mm/dd/yyyy hh:mm)。 我需要列出所有包含重复日期的行(有很多) 我正在通过 cygwin 为 WinX
我使用的是 MySQL 5.7。 我有一个表格如下: -------------------------------------------------- | id | currentcy_id |
所以我有一个像这样的 ng-repeat: Join Ride /md-switch> 但是,每个 md-switch 都有相同的模型,因此当我在 Control
据我了解, Mongoose 预保存 Hook 在将文档插入集合之前但在验证发生之后触发。因此,如果一次验证失败,则不会调用预保存 Hook 。 就我而言,无论如何都会调用它们: 下面的简单代码的作用
如果我对我的目标文件执行此 grep,我会得到例如 275 作为结果。 但是我想学习 awk,所以在 awk 中尝试了这个: awk 'BEGIN { count=0 } /my pattern/
我是一名优秀的程序员,十分优秀!