Основываясь на описании вашей базы данных, каждый клиент может иметь несколько динамиков. Это отношение «один ко многим» (1-N) и обычно выражается в двух таблицах. Один из них - это главный стол, «клиенты», который хранит информацию о клиенте, но ничего не говорит о динамиках. Подчиненная таблица, «колонки», хранит информацию о каждом динамике и идентификаторе клиента, с которым он связан.
Например, динамик 1, динамик 5 и динамик 8 имеют одинаковый идентификатор клиента в таблице колонок. Поле client_id в таблице колонок называется внешним ключом.
Теперь вы можете получить всю информацию о динамиках для клиента 1 в одном запросе:
select * from clients, speakers where clients.clientid=speakers.clientid and clients.clientid=1
Ваш текущий дизайн два стола испорчен, потому что у вас есть столбец speakeridS в таблице клиентов. Столбец внешнего ключа, который выражает ONE в соотношении 1-N, всегда должен находиться в «много» таблице, то есть «динамиках».
Поскольку ваша текущая таблица громкоговорителей не имеет информации client_id, вам нужно будет написать преобразователь данных, чтобы перенести строку, поля с разделителями-запятыми в таблицу клиентов, в числовое поле внешнего ключа «clientid» в стол для колонок. Это одноразовое преобразование так что вы можете сделать это в PHP скрипт:
$query="select * from clients";
$rs=mysql_query($query,$db);
while ($myrow=mysql_fetch_array($rs)){
$clientid=$myrow['clientid'];
$speakerids=explode(',',$myrow['speakers']);
foreach ($speakerids as $speakerid){
if (!is_numeric($speakerid)) continue;
$query="update speakers set clientid=$clientid where speakerid=$speakerid";
mysql_query($query,$db);
}
}
Ваше приложение отображает колонки в контрольном списке. Интерфейс, однако, не должен диктовать вашу структуру хранения. Напишите цикл и сохраните идентификатор клиента в каждой записи колонок.
Если один и тот же динамик работает с несколькими клиентами, вам понадобится таблица «много ко многим» (N-N). Это делается через таблицу мостов. В этом случае ни клиенты, ни колонки не должны знать друг о друге. Создайте еще одну таблицу под названием «клиенты-клиенты», которая включает по меньшей мере два внешних ключа: clientid и speakerid.
Вам нужно посмотреть некоторые учебные пособия по реляционной базе данных. Ваш дизайн ужасен. Просто google 'реляционная конструкция базы данных' и выберите несколько. – RiggsFolly