簡體   English   中英

MySQL 數據庫建模問題來自一個新手

[英]MySQL database modeling problem from a newbie

好的,我有一個問題,我已經搜索並搜索了在線解決方案,但找不到任何線索,這就是(哦,我對這個數據庫的東西很陌生;-)

假設我有數千家零售店,每家可以攜帶 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 ...

我可以跟蹤我的商店庫存,但我不知道如何進行“組合”搜索,求助!

您應該能夠使用數據庫查詢來解決大部分問題,但您仍然需要圍繞此查詢包裝的另一種編程語言(例如 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();

雖然我可能沒有正確的所有邏輯,尤其是在格式化方面,但這應該會讓你走上正確的道路,了解你需要 go 的方式。 確實,這個問題需要結合使用查詢和編程語言來解決。

查詢可以解決一小部分問題,但是它們在解決這些問題方面做得非常好,而編程語言可以解決更廣泛的問題。 但是,在許多情況下,編程語言在解決相同問題方面的效率不如數據庫,這就是為什么將兩者多次結合可以更高效地解決復雜問題的原因。

這絕對不是數據庫問題。 這是一個像 Prolog 或 ECLiPSe 這樣的問題,或者可能是其他語言中的約束求解器。

var1 = Select the unique store numbers

foreach var1
  select the products that apply to that store number.
/foreach

正義是正確的,這不一定是數據庫問題,而是更普遍的編程問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM