0

わかりました、私はオンラインで解決策を検索して検索しましたが、手がかりが見つからないという問題があります.

何千もの小売店があり、それぞれが 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、ストアID
1、pid34、10
2、pid234、10
3、pid876、10
4、pid120、10
5、pid100、10
6、pid45、45
...など...

ストアの在庫を追跡することはできますが、「組み合わせ」検索を行う方法がわかりません。助けてください!

4

3 に答える 3

1

この問題のほとんどは、データベース クエリを使用して解決できるはずですが、このクエリをラップする別のプログラミング言語 (JDBC を使用した Java など) が必要になります。ある種の 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();

特にフォーマットに関しては、すべてのロジックが正しいとは限りませんが、これにより、必要な方法で正しい道を進むことができます。この問題は、クエリとプログラミング言語の組み合わせを使用して解決する必要があります。

クエリは問題の小さなサブセットを実行できますが、それらの問題を実行するのに非常に優れていますが、プログラミング言語ははるかに幅広い問題を解決できます。ただし、多くの場合、プログラミング言語は、データベースが同じ問題を解決するほど効率的ではありません。そのため、この 2 つを何度も組み合わせることで、複雑な問題を非常に効率的に解決できるのです。

于 2009-03-10T03:04:12.913 に答える
0

これは断固としてデータベースの問題ではありません。これは、Prolog や ECLiPSe のようなものが最適な問題であるか、またはおそらく他の言語内の制約ソルバーです。

于 2009-03-10T02:03:57.300 に答える
0
var1 = 一意の店舗番号を選択

foreach var1
  その店舗番号に該当する商品を選択してください。
/foreach

これは必ずしもデータベースの問題ではなく、より一般的なプログラミングの問題です。

于 2009-03-10T02:32:11.290 に答える