Вывод товара из базы для нескольких категорий
Добрый вечер!
Попалась следующая задача:
есть две таблицы в базе данных:
1. Таблица с товарами — tovars;
2. Таблица с категориями — category;
В таблице tovars есть столбец, который содержит в себе номера (идентификаторы category) категорий, то есть каждому товару сопоставлено значение (INT) категории, в которой он должен располагаться?
[IMG]http://i028.***********/1102/1f/2450693afef5.gif[/IMG]
Как сделать, чтобы один товар мог принадлежать нескольким категориям!
Сайт уже почти готов и не хотелось бы создавать еще одну таблицу в базе.
Вывод категорий товара в магазине
CREATE TABLE IF NOT EXISTS `shop_cat` ( `id_cat` int(11) NOT NULL, `anchor_cat` varchar(500).
Вывод множества родительских категорий товара — с неограниченной вложенностью
Вывод множества родительских категорий товара — с неограниченной вложенностью правильно ли я.
Сложная задача — Вывод товара и всех его категорий
Здравствуйте многоуважаемые личности. Здача такова — у товара есть поле id_cat в котором.
Получение количества товара к каждой из категорий с учетом дочерних категорий
Здравствуйте. у меня есть список категорий в таблице mod_catalog_cat типичные колонки.
Сообщение от Luter1984
Сообщение от Luter1984
Я лично создаю отдельную таблицу с полями: item_id (ключ) — category_id, и потом SQL-запросом вытягиваю нужные item_id.
Если же вы не хотите создавать еще одну таблицу, то можете хранить список категорий в базе, просто перед запросом этот список нужно сериализовать, но тут уже придется повозиться, так как необходимо вытягивать все товары + отфильтровывать нужные.. Вам это надо.
Создание промежуточной таблицы типа этой.
[IMG]http://s008.***********/i306/1102/05/4c10b65d3f1e.jpg[/IMG]
Сообщение от Luter1984
Сообщение от Luter1984
Очень легко.
1. При «создании» товара указываем к каким категориям он относиться
2. Добавляем товар в БД и сохраняем его id, который можно легко узнать после выполнения запроса
3. Добавляем в таблицу зависимостей записи вида id -> category_id
Добавлено через 1 минуту
Сообщение от Dejust
Сообщение от Dejust
Не совсем понял, как это реализуется. Ни разу не пользовался связанными таблицами. О_о
Добавлено через 10 минут
Предположим есть товар. Мяч
Я вписываю в поля формы всю информацию по этому товару (предположим их три: id, title, text).
Через checkbox отмечаю к каким категориям будет принадлежать этот товар. Т.е. в качестве значений checkbox передаю массив обработчику с идентификаторами категорий.
Переходим к обрабочику формируем запрос на добавление информации по товару в таблицу tovars
Также в обработчик поступает и массив с id категорий, что с ним делать?
Т.е. как занести в базу информацию, что этот товар будет принадлежать именно к этим категориям?
Ну сделать в цикле n-число sql запросов
Например, чисто схематичный код
$id = 2; // id товара, запомнили его после вставки в БД foreach($categories as $category) { $this->db->query('INSERT INTO 'table_cat_tov' ('tovar_id', 'category_id') VALUES ('.$id.', '.$category.'); >
Так мы сделаем n-записей в таблицу зависимостей; вроде можно сделать более элегантно, но я забыл этот способ
А «n-число sql запросов» не повлияет на работу скриптов (ну типа скорости загрузки страниц и т.д.)
И Как составить SQL запрос на создание table_cat_tov, ведь именно зависимости id -> category_id не представляю как реализовывать (работаю в phpMyAdmin)
Сообщение от Luter1984
Ну если при каждом запуске сайта будут выполняться это самое «n-число sql запросов» то повлияет и очень сильно, в худшую сторону конечно же. Но, я так понимаю, вы будете просто добавлять эти самые «товары» из адмники (или еще откуда), так что в целом на сайт это не повлияет.
Сообщение от Luter1984
И Как составить SQL запрос на создание table_cat_tov, ведь именно зависимости id -> category_id не представляю как реализовывать (работаю в phpMyAdmin)
Так я же и расписал в предыдущем посте, как реализовать эти самые «зависимости».
Таблицу в БД, с помощью PhpMyAdmin, создают так: 1. выбираем БД 2. Кликаем по «создать новую таблицу»
$res_rubrika = mysql_query("SELECT id,view,cena,categorynalichie,data,mini_image,big_image,title FROM rubriki WHERE categoryname='$methody' ORDER BY data DESC LIMIT $start, $num", $databasic);
Где $methody представляло собой число (идентификатор категории)
Т.е пользователь, который нажал по ссылке, реализованной в коде:
do { printf ("%s'>%s", $myarrayres_method["id"], $myarrayres_method["rubrikatitle"]); } while ($myarrayres_method = mysql_fetch_array($res_method));
попадал на страницу с этой категорией и теми товарами, для которых $methody был равен id категории по которой кликнули.
Сейчас как я понимаю $methody будет уже не числом, а массивом. Или не так?
Если не так, то как извлечь товар для категории.
Сообщение от Luter1984
Я так понимаю извлечь товары.
1. Выбираем все id товаров с условием category_id = $cat_id; $cat_id — id текущей категории
2. Выбираем товары из таблицы товаров с условием
В $list_id_tovar список категорий, которые мы получили после шага №1. Как привести этот список к строке я описал в другой вашей теме: Выборка из базы в цикле?
Столкнулся с весьма интересной проблемкой. Может кто знает из-за чего она происходит.
Через форму добавляется товар, выбор категорий для которого происходит в этой форме через checkbox:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
form action='update_tovar.php' method='post' name='form_tovar' enctype='multipart/form-data'> label id='name_tovar'>Краткое содержимое страницы с товаром (нужно для поисковиков):br />/label> input name='ntovar_meta_d' type='text' size='100' maxlength='100' id='fonesearchof' class="validate[required]" />br />br /> label id='name_tovar'>Ключевые слова на странице с товаром (нужно для поисковиков):br />/label> input name='ntovar_meta_k' type='text' size='100' maxlength='100' id='fonesearchof' class="validate[required]" />br />br /> label id='name_tovar'>Наименование добавляемого товара:br />/label> input name='ntovar_title' type='text' size='100' maxlength='100' id='fonesearchof' class="validate[required]" />br />br /> label id='name_tovar'>Цена товара (руб.):/label> input name='ntovar_prais' type='text' size='35' maxlength='35' id='fonesearchof' class='validate[required,custom[onlyNumber]]' />br />br /> label id='name_tovar'>Возрастные рекомендации по товару:/label>br />br /> label id='name_tovar'>от возраста:/label> input name='ntovar_vosrast_mini' type='text' size='23' maxlength='20' id='fonesearchof' class='validate[required,custom[onlyNumber]]' /> label id='name_tovar'> до возраста:/label> input name='ntovar_vosrast_maxi' type='text' size='23' maxlength='20' id='fonesearchof' class='validate[required,custom[onlyNumber]]' />br />br /> label id='name_tovar'>Выберите категории для товаров:br />br />/label> div id="virav_table"> table id="newcat">tr>th class='newcat_title'>Авторские методики/th>/tr>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
do { printf("%s'>%s ", $myrow_newtovar_1["id"],$myrow_newtovar_1["rubrikatitle"]); } while($myrow_newtovar_1 = mysql_fetch_array($result_newtovar_1)); ?> Рубрики do { printf("%s'>%s ", $myrow_newtovar_2["id"],$myrow_newtovar_2["rubrikatitle"]); } while($myrow_newtovar_2 = mysql_fetch_array($result_newtovar_2)); ?> /table>
/div>br /> label id='name_tovar'>Описание добавляемого товара:/label> textarea id='editor1' name='editor1'>/textarea>br /> script type='text/javascript'>CKEDITOR.replace( 'editor1' );/script> input type='submit' class='update_button' value='Сохранить' name='button_ntovar' /> /form> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
if (isset($button_ntovar)) { if (isset($ntovar_meta_d) && isset($ntovar_meta_k) && isset($ntovar_title) && isset($ntovar_prais) && isset($ntovar_vosrast_mini) && isset($ntovar_vosrast_maxi) && isset($new_id_cat) && isset($editor1)) { /*уберем пробелы до и после названия товара*/ $ntovar_title = trim($ntovar_title); /*проверка на количество символов в слове*/ $words = preg_split("/[\s]+/",$ntovar_title); foreach($words as $index => $values) { if (!preg_match("/^[a-zA-Zа-яА-Я0-9 -.,+« »№!?ё]+$/u", $values)) { echo "Название товара содержит слово длина которого превышает 14 символов!
Такое название недопустимо!
Также возможно были использованы специальные символы (см. ниже)
"; echo " Вы будете перемещены через 10 сек. Если не хотите ждать,то
- нажмите сюда -