首先,我是PHP新手... 所以我还在过程化地编写和理解PHP。也就是说,
我有一个保存在数据库中的数字集合(金额)。
问题:使用PHP和mySQL,
1.最好的方法是什么,可以从数据库中提取此信息,使金额与其交易ID相关联?
2.最重要的是,我需要找到一组匹配的数字,在数据库中等于29的总和。
下面是我的数据库Transaction_tlb的Transaction表格,用于mydb。
现在,我有一个想法,但它不够高效。我将尝试每种可能的情况,这意味着如果我有n个值要检查,时间复杂度将约为2^n。这非常低效(而且我甚至不知道我的代码是否有意义(见下文))。
我在这个YouTube视频中看到了一个类似的例子:https://www.youtube.com/watch?v=XKu_SEDAykw&t,但是,我不确定如何用php编写代码。
代码如下:
我有一个保存在数据库中的数字集合(金额)。
问题:使用PHP和mySQL,
1.最好的方法是什么,可以从数据库中提取此信息,使金额与其交易ID相关联?
2.最重要的是,我需要找到一组匹配的数字,在数据库中等于29的总和。
下面是我的数据库Transaction_tlb的Transaction表格,用于mydb。
Transaction_ID | Name | Date | Amount
---------------|------------------|-----------------|------------
11012 | Jonathan May | 6/12/2016 | 84
21012 | John Pedesta | 6/12/2016 | 38
31012 | Mary Johnson | 1/01/2017 | 12
41012 | John Johnson | 8/01/2017 | 13
51012 | Keith Jayron | 8/01/2017 | 17
61012 | Brenda Goldson | 8/01/2017 | 2
71012 | Joshua Traveen | 8/01/2017 | 78
81012 | Remy ma Goldstein| 8/01/2017 | 1
91012 | Barbie Traveen | 8/01/2017 | 1
现在,我有一个想法,但它不够高效。我将尝试每种可能的情况,这意味着如果我有n个值要检查,时间复杂度将约为2^n。这非常低效(而且我甚至不知道我的代码是否有意义(见下文))。
我在这个YouTube视频中看到了一个类似的例子:https://www.youtube.com/watch?v=XKu_SEDAykw&t,但是,我不确定如何用php编写代码。
代码如下:
<?php
if (!mysql_connect("localhost", "mysql_user", "mysql_password") || !mysql_select_db("mydb")) {
die("Could not connect: " . mysql_error()); } //End DB Connect
$capacity = 29; //Knapsack Capacity or Sum
//Select Transact ID and Value from the Database where Amount is <= Capacity
$fetchQuery = "SELECT 'Transaction_ID', 'Amount' FROM 'Transaction_tlb' WHERE 'Amount' <= $capacity";
$components = array(); //new array to hold components
if ($queryResults = mysql_query($fetchQuery)) {
//check if data was pulled
if (mysql_num_row($queryResults) != NULL) {
while ($row = mysqli_fetch_assoc($queryResults) {
$components[$row['Transaction_ID']] = $row['Amount'];
}
}
}
/* Correct me if i am wrong, but, Components associative array Should be something like
$components = array('11012'=> 84, '21012'=> 38, '31012'=> 12, '41012'=> 13, '51012'=> 17,
'61012'=> 2, '71012'=> 78, '81012'=> 1, '91012'=> 1);
*/
$components = asort($components) // sort array in ascending order
$componentCount = count($component)
function match ($componentCount, $capacity) {
$temp = match (($componentCount - 1), $capacity);
$temp1 = $component[$componentCount] + match (($componentCount - 1), ($capacity - $component[$componentCount]));
$result = max($temp, $temp1);
return $result;
}
}?>
请问有人能指点我正确的方向吗?这段代码不起作用...即使它起作用了...该方法也根本不够高效。如果我需要处理300万条记录会怎么样呢?求帮助。