Эффективный способ управления отношениями между двумя таблицами базы данных на внешнем интерфейсе с помощью флажков? - PullRequest
1 голос
/ 02 октября 2010

Краткая справочная информация: из трех таблиц базы данных, которые имеют отношение к этому вопросу, одна содержит информацию об устройствах (d.id, d.name), вторая содержит принадлежности для устройств в первой таблице (a.id,a.name) и третья таблица обрабатывает отношения между первыми двумя (d.id, a.id).

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

И это подводит нас к моей проблеме: я не уверен, что этонаиболее эффективный способ проверки того, какие флажки были изменены после отправки формы, а также какой будет наиболее эффективный способ запроса базы данных, поскольку для одной и той же отправленной формы могут потребоваться как INSERT s, так и DELETE s(т. е. пользователь снимает флажок с флажка и проверяет флажок без флажка - да, эта фраза должна быть упражнением в дикции - перед отправкой).

Кстати, я не склонен использовать чекбоксы, но подумал, что это будет чистый способ справиться с этим.Любые предложения и проверочный код будут более чем признательны!

Спасибо всем заранее!

Ответы [ 2 ]

2 голосов
/ 02 октября 2010

Если у вас есть кнопка «Отправить» под флажками, просто отправьте форму на сервер с помощью POST или GET, в зависимости от того, что вам нужно.

Используйте AJAX и onClick с флажками, если вы хотите изменить базу данных на лету. (Когда пользователь снимает флажок, отправляет измененное значение флажка ('false') в сценарий PHP, он выполняет запрос DELETE. Если значение флажка равно 'true', он запускает запрос INSERT).

Для отправки AJAX вы можете использовать jQuery (в конечном итоге будет меньше кода)

2 голосов
/ 02 октября 2010

Посмотрите на REPLACE INTO на вашем бридж / стол соединения между продуктами и аксессуарами.Это недостаточно используемый гем в MySQL.

В противном случае, как вы сказали, вы можете DELETE, а затем INSERT все.Но если у вас есть какие-либо дополнительные внешние ключи, это может запутаться.Однако, в конце концов, это, кажется, самый распространенный способ, к лучшему или к худшему.

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

...