Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите в составлении структуры БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kappa
Отправлено: 02 Декабря, 2011 - 09:56:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




Добрый день. Подскажите, как должна выглядеть БД в такой ситуации:
Когда добавляю новый товар необходимо для товара выбрать соответствующие размеры (обуви) какие есть и сохранить.
 
 Top
EuGen Администратор
Отправлено: 02 Декабря, 2011 - 10:14:42
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Таблица "товары" (goods), таблица "размеры" (sizes) и таблица-связка "размеры товаров" (goods_sizes).

Пример:
PHP:
скопировать код в буфер обмена
  1. goods
  2. +--+--------+
  3. |id|  name  |
  4. +--+--------+
  5. | 1| Обувь1 |
  6. +--+--------+
  7. | 2| Обувь2 |
  8. +--+--------+
  9.  
  10. sizes
  11. +--+--------+
  12. |id|  name  |
  13. +--+--------+
  14. | 1| 40-й   |
  15. +--+--------+
  16. | 2| 41-й   |
  17. +--+--------+
  18. | 3| 46-й   |
  19. +--+--------+
  20.  
  21. goods_sizes
  22. +-------+-------+
  23. |good_id|size_id|
  24. +-------+-------+
  25. |  1    |  2    |
  26. +-------+-------+
  27. |  2    |  1    |
  28. +-------+-------+
  29. |  2    |  2    |
  30. +-------+-------+
  31. |  2    |  3    |
  32. +-------+-------+


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
kappa
Отправлено: 02 Декабря, 2011 - 10:38:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




EuGen

Спасибо,
Но насколько я понимаю одним INSERT не получится занести данные и в товары
, и в таблицу-связку с размерами одновременно от одного button.

А таблица связка будет состоять из id, id_goods, sizes
Интересно, а как будет выглядеть запрос при вставке в таблицу-связку
когда нужно занести размер обув 41, 42, 45. Если учесть что потом эти размеры
нужно будет выводить списком.

Объясните мне, будьте-добры, а то я с этим уже не впервые сталкиваюсь а над реализацией ломаю голову.
(Добавление)
Если я сделаю такую вставку то сохранится только один размер.

CODE (SQL):
скопировать код в буфер обмена
  1. "INSERT INTO goods_sizes (good_id, size_id) VALUES ($good_id, $one)";


А можно чтобы при клике на button сохранить несколько размеров ?
 
 Top
EuGen Администратор
Отправлено: 02 Декабря, 2011 - 10:58:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нужно добавлять соответствующие записи в таблицу-связку, вот и все.
INSERT INTO goods_sizes (good_id, size_id) VALUES ($good_id, $one), ($good_id, $two), {...} ($good_id, $N)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
kappa
Отправлено: 02 Декабря, 2011 - 11:13:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




EuGen
Спасибо большое, наконец то мне пришло прозрение.

А что если $one нету,
INSERT INTO goods_sizes (good_id, size_id) VALUES ($good_id, $one), ($good_id, $two),
тогда пускай просто NUll попадает, или же для каждого возможного варианта составить
отдельный запрос?
 
 Top
EuGen Администратор
Отправлено: 02 Декабря, 2011 - 11:23:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если нет, то соответствующий ($good_id, $one) писать вообще не нужно. Это можно отследить во время формирования текста запроса.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
kappa
Отправлено: 02 Декабря, 2011 - 11:46:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




EuGen
А можно малый пример формирования такого текста запроса с проверкой.
Очень бы хотелось увидеть.
 
 Top
EuGen Администратор
Отправлено: 02 Декабря, 2011 - 12:01:30
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Обойдемся без лямбда-функций, чтобы пример попроще вышел:
PHP:
скопировать код в буфер обмена
  1. //Массив с id размеров, предполагается что Вы выбрали их из БД
  2. $rgSizes=array(1, 3, 5);
  3. //id для товара, размеры которого добавляются
  4. $iGoodId=2;
  5.  
  6. if(count($rgSizes))
  7. {
  8.    $sSQL   = 'INSERT INTO goods_sizes (good_id, size_id) VALUES ';
  9.    $rgTemp = array();
  10.    foreach($rgSizes as $iSizeId)
  11.    {
  12.       $rgTemp[]='('.$iGoodId.', '.$iSizeId.')';
  13.    }
  14.    $sSQL  .= join(',', $rgTemp);
  15. }
  16. //var_dump($sSQL);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
kappa
Отправлено: 02 Декабря, 2011 - 19:38:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




EuGen
Спасибо, очень интересная реализация.
Я бы до такого долго думал ...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB