хорошо, поэтому у меня есть база данных, состоящая из двух таблиц, продуктов и поставщиков.
Все поставщики заполняют форму, и их данные затем хранятся в таблице поставщиков, а таблица продуктов содержит список всех продуктов, поэтому, когда поставщик заполняет форму, он может выбрать столько продуктов, сколько пожелает, поскольку я используйте jQuery JSON и AJAX, чтобы получить список всех продуктов, а затем заполнить выпадающий список со всеми из них, которые затем могут быть клонированы столько раз, сколько необходимо.
Проблема, с которой я сейчас столкнулась, заключается в том, как я могу вставить все различные продукты, которые поставщик выбирает в таблицу поставщиков, или я должен просто рассказать обо всех продуктах, которые он выбирает для одного поставщика, для лучшей нормализации, поскольку все продукты уже здесь?
Я буду использовать jQuery $ .ajax для отправки данных формы в формате JSON в ожидающий PHP-файл, который затем проанализирует его и вставляет данные в базу данных.
Поэтому в основном мне нужно выяснить, как связать данные в базе данных, чтобы добиться наилучшей нормализации, и мне нужно выяснить способ вставки переменного количества продуктов в таблицу поставщиков или найти способ связать многие продукты, которые он выбирает одному поставщику.
Я очень новичок в реляционных базах данных, поэтому любые советы о том, как действовать дальше, будут полезны, так же как и любой другой совет, который вы, ребята, можете иметь!
Код jQuery, который я использую для заполнения клонов и POST, выбирает поставщик:
$(document).ready(function() { var count = 0; //when clicked it will remove the closest div with a class of 'container' $("span.remove").live('click', function(){ $(this).closest("div.container").fadeOut(400, function(){ $(this).remove(); $('#button').attr('disabled',''); }); }); //initialize the button $('#button').attr('disabled',''); $('#button').click(function(){ var count = $("#systems_wrapper > .container").size(); var lastID = $("#systems_wrapper > .container:last").attr('id'); var exploded = lastID.split("_"); var increment = Number(exploded[1])+1; //if the user has selected 5 products, disable the 'add' button if(count >= 5){ $('#button').attr('disabled','disabled'); }else { $('#button').attr('disabled',''); } //clone the first drop down and give it a different ID, as well as it's child elements var test = $('#systems_0.container').clone().attr('id', 'system_' + increment).appendTo('#systems_wrapper'); test.children(':nth-child(2)').append('<span class="remove"></span>'); test.children(':nth-child(2)').children(':first').attr('id', 'mail_' + increment).attr('class','dropDowns').attr('onchange','test();'); }); //get the products JSON object returned from test_post.php and run the necessary functions on the returned data $.getJSON("test_post.php", function(data){ //clean out the select list $('#box').html(''); //run the loop to populate the drop down list $.each(data, function(i, products) { $('#box').append( $('<option></option>').html(products.products) ); }); }); }); //this gets all of the products chosen and then gets each ones value and ID, and then posts it to the qwer.php file function test(){ var sections = $('#systems_wrapper').find('.dropDowns'); var newArray = new Array(); sections.each(function(){ var id = $(this).attr('id'); var val = $(this).val(); var o = { 'id': id, 'value': val }; newArray.push(o); }); alert(newArray); $.ajax({ type: "POST", url: "qwer.php", dataType: 'json', data: { json: JSON.stringify(newArray) } }); }
Thanx заранее!
Если я правильно понимаю проблему с уровня базы данных, следует ли использовать промежуточную таблицу, называемую ProductSupplier, содержащую столбец Product_ID и Supplier_ID.
Затем, когда поставщик выбирает продукт, добавьте идентификатор поставщика и продукта в новый столбец в этой таблице.
Это позволит нескольким поставщикам выбрать один и тот же продукт и несколько продуктов, которые будут выбраны одним и тем же поставщиком.
EDIT: я хотел сказать: «Добавить идентификатор поставщика и продукта в новую ROW в этой таблице»