好的,我有一个问题,我搜索并搜索了在线解决方案,找不到任何线索,这里是(哦,我对这个数据库的东西很新; - )
假设我有数以千计的零售店,每个可以携带1到100种产品,但有10,000种可用的产品。我需要每个商店所有者能够看到(并编辑)他们商店中的产品列表 - 这很简单,我可以为此找出表格结构 - 但我还想做的是能够找到商店中最常见的产品组合,例如我希望看到类似的东西:
120: pid34, pid234, pid876, pid120, pid100 118: pid45, pid54, pid657, pid763, pid237 115: pid23, pid546, pid657, pid543, pid23
如果第一个数字是包含这些产品的商店数量(商店内产品的订单无关紧要),并且pid数字是产品的产品ID(除了记住最多可能有100个产品)在每个商店)。
所以如果我设置一个表:
ID, PID, Store ID 1, pid34, 10 2, pid234, 10 3, pid876, 10 4, pid120, 10 5, pid100, 10 6, pid45, 45 ... etc ...
我可以跟踪我的商店库存,但我不知道如何进行我的'组合'搜索,帮助!
答案 0 :(得分:1)
您应该能够使用数据库查询解决大部分问题,但是您仍然需要使用另一种编程语言(例如java和JDBC)。假设您正在使用某种类型的SQL数据库。通过你的结构的外观我认为你将需要使用group by子句。虽然我不知道你的数据库结构,因为你没有提到它,所以我为了这个而说,你的表被称为“产品”
让我们首先设计一个查询来获取每个产品的数量:
SELECT pid, COUNT(*) AS NUM FROM products p GROUP BY pid ORDER BY NUM DESC;
因此,此查询将返回如下内容:
pid, NUM
pid34 120
pid29 120
pid20 20
所以,这种情况越来越接近,但仍然不尽如人意。但是,现在通过将查询与编程语言结合使用,可以轻松完成任务。我在下面做了一些java代码作为例子。
// Assumes that database connection has already been made and is in the variable: conn1
Statement stmt1 = conn1.createStatement();
ResultSet rs1 = stmt1.executeQuery("SELECT pid, COUNT(*) AS NUM FROM products p GROUP BY pid ORDER BY NUM DESC");
int prevNum = -1;
while(rs1.next())
{
int thisNum = rs1.getInt("NUM");
if(thisNum != prevNum)
{
// this means it is a different number than the last result, start a new line
system.out.print("\n" + thisNum + ": ");
prevNum = thisNum;
}
system.out.print(rs1.getString("pid") + ", ");
}
stmt1.close();
conn1.close();
虽然我可能没有所有的逻辑正确,特别是在格式化时,这应该让你走上正确的道路,你需要如何去做。实际上,这个问题需要通过使用查询和编程语言的组合来解决。
查询可以解决一小部分问题,但是他们在解决这些问题方面做得非常好,而编程语言可以解决更多的问题。但是,在许多情况下,编程语言在解决相同问题方面不如数据库那么高效,这就是为什么将这两种方法组合在一起可以很有效地解决复杂问题。
答案 1 :(得分:0)
这绝对不是数据库问题。这是一个像Prolog或ECLiPSe这样的问题很有用的问题,或者也许是其他语言中的约束求解器。
答案 2 :(得分:0)
var1 = Select the unique store numbers foreach var1 select the products that apply to that store number. /foreach
正义是正确的,这不一定是数据库问题,而是更普遍的编程问题。