Проблема моделирования базы данных MySQL от новичка - PullRequest
0 голосов
/ 10 марта 2009

Хорошо, у меня есть проблема, которую я искал и искал решения онлайн и не могу найти потенциальных клиентов, вот она (о, и я очень новичок в этой базе данных; -)

Допустим, у меня есть тысячи розничных магазинов, в каждом из которых может быть от 1 до 100 товаров, но доступно 10 000 возможных товаров. Мне нужно, чтобы каждый владелец магазина мог видеть (и редактировать) список товаров в своем магазине - это просто, и я могу выяснить структуру таблицы для этого - но я также хочу найти возможность найти Наиболее распространенные комбинации продуктов в магазинах, например, я хочу увидеть что-то вроде:

120: pid34, pid234, pid876, pid120, pid100
118: pid45, pid54, pid657, pid763, pid237
115: pid23, pid546, pid657, pid543, pid23

Где первое число - это количество магазинов с этими товарами (порядок товаров в магазине не имеет значения), а номера pid - это идентификаторы товаров (за исключением того, что может быть до 100 товаров). в каждом магазине).

Итак, если я настрою таблицу:

ID, PID,    Store ID
1,  pid34,  10
2,  pid234, 10
3,  pid876, 10
4,  pid120, 10
5,  pid100, 10
6,  pid45,  45
... etc ...

Я могу отслеживать запасы в моем магазине, но я не знаю, как я могу выполнить поиск по «комбинациям», помогите!

Ответы [ 3 ]

1 голос
/ 10 марта 2009

Вы сможете решить большую часть этой проблемы, используя запрос к базе данных, но вам все равно понадобится другой язык программирования, обернутый вокруг этого запроса (например, Java вместе с JDBC). Предполагая, что вы используете какую-то базу данных SQL. Судя по вашей структуре, я думаю, что вам нужно будет использовать группу по предложению. Хотя я не знаю структуру вашей базы данных, поскольку вы не упомянули об этом, поэтому я хочу ради этого сказать, что ваша таблица называется «products»

Давайте сначала разработаем запрос, чтобы получить номер каждого продукта:

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();

Хотя у меня может быть не вся логика правильная, особенно когда дело доходит до форматирования, это должно привести вас на правильный путь с тем, как вам нужно это делать. На самом деле эту проблему нужно решить с помощью комбинации запросов и языка программирования.

Запросы могут создавать небольшую группу проблем, однако они отлично справляются с этой задачей, тогда как язык программирования может решать гораздо более широкий круг задач. Однако язык программирования во многих случаях не будет столь же эффективным, как база данных для решения одних и тех же проблем, поэтому объединение этих двух раз может позволить решать сложные проблемы с большой эффективностью.

0 голосов
/ 10 марта 2009
var1 = Select the unique store numbers

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

Справедливость справедлива, однако, это не обязательно проблема с базой данных, а скорее более общая проблема программирования.

0 голосов
/ 10 марта 2009

Это категорически не проблема с базой данных. Это проблема, для которой отлично подойдет что-то вроде Prolog или ECLiPSe, или, возможно, решатель ограничений на каком-то другом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...