IhorDod Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 Коллеги, день добрый. Помогите, плиз, написать правильный запрос к БД. Есть такая задача: Реализовать схем таблица БД когда один товар может иметь несколько категорий, но всегда должен иметь одну главную То есть продукт “Костюм в клетку” может иметь главную категорию “Костюмы” но также иметь дополнительные категории “Одежда”, “Для мужчин”, “Акции и скидки” Написать запрос и в этом случае, то-есть зная только id категории получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. Я создал 3 таблицы. 1. categories id slug name 2. products id name price 3. products_categories product_id categorie_id index_categorie ( здесь указываю id главной категории) Я знаю как написать запрос чтоб получить по id товары которые входят только в оду эту категорию. А как написать если этот товар встречается в других категориях? Помогите хоть советом куда смотреть. Надіслати Поділитися на інших сайтах More sharing options...
freelancer Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 правильно заданный вопрос содержит половину ответа Надіслати Поділитися на інших сайтах More sharing options... TeslaFeo Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 Допустим: "Костюм в клетку" - товар с ID 1 "Костюмы" - категория с ID 11 "Одежда" - категория с ID 12 "Акции и скидки" - категория с ID 13 Тогда в связывающей таблице будет три записи: | product_id | category_id | | 1 | 11 | | 1 | 12 | | 1 | 13 | Запрашиваем все товары нужно категории (например, костюмы c ID 11) SELECT `product_id` FROM `product_to_category` WHERE `category_id` = 11 Получим ID товаров, входящие в категорию с ID 11 Надіслати Поділитися на інших сайтах More sharing options... IhorDod Опубліковано: 12 жовтня 2018 Автор Share Опубліковано: 12 жовтня 2018 Согласен, не прав. Уточню. ТЗ не мое и составлено заказчиком. Задача: Написать запрос и в этом случае, то-есть зная только id категории получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. Все остальное (все что уже сделал) описано выше. Вот мой запрос SELECT * FROM products inner join products_categories on products.id = products_categories.product_id inner join categories on products_categories.categorie_id = categories.id where categorie_id = 1; Но это я получаю товар который есть в в этой категории ( например ОДЕЖДА). А как выполнить условие Цитата получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. ВОт тут у меня ступор. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 от версии зависит. не ясно, что значит в дополнительных. если в дополнительных = дочерних, то уверен этот запрос уже есть в движке Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 ой бида Попробуйте еще раз сформулировать задание. Надіслати Поділитися на інших сайтах More sharing options... jaffagold Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 Если я верно понял, то надо В указанной категории( допустим ID категории = 20) перебирать товары Спойлер product_id category_id main_category 28 20 1 28 24 0 29 20 1 29 24 0 30 20 1 30 33 0 31 33 1 32 34 1 33 20 1 33 28 0 34 34 1 35 20 1 36 34 1 40 20 1 40 24 0 41 27 1 42 20 1 42 28 0 43 18 1 43 20 0 44 18 1 44 20 0 Если товар привязан только к данной категории, то его пропускаем ( товар с ID = 35 пропускаем) Если товар привязан еще к другим категориям, то что-то делаем (например, просто выводим Название и ID товара или в таблице Название и ID товара, и ID всех категорий, где он выводится), Например,( для категории с ID = 20) товары с ID 28, 30, 33, 40 и т.д. Надіслати Поділитися на інших сайтах More sharing options... 100napb Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 (змінено) попробуйте вот так. для своего удобства и самопроверки, использовал стандартные таблицы oc. Уверен, под свои таблички подгоните. Результаты удобно, например, explode'ить, что бы разобрать из строки на отдельные значения Spoiler SELECT p.model AS 'product model name' ,(SELECT GROUP_CONCAT(optc.category_id) FROM oc_product_to_category optc WHERE optc.product_id = p.product_id) AS 'ALL product catergories' FROM oc_product p, oc_product_to_category pc, oc_category c WHERE p.product_id = pc.product_id AND c.category_id = pc.category_id GROUP BY p.product_id HAVING COUNT(*) > 1 ORDER BY 2 ASC на выходе результат вроде такого - в строке перечислены все категории, в которые входит каждый продукт Spoiler А вообще, freelancer должен быть прав - в ОС 100% есть функция типа getProductCategories или что-то похожее. Конечно, она работает на родной структуре БД, на родных табличках. Но Вы можете подсмотреть, как там все устроено и сделать свою функцию с блэкджеком и прочим Змінено 13 жовтня 2018 користувачем 100napb Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Как создать правильный запрос в SQL? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
TeslaFeo Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 Допустим: "Костюм в клетку" - товар с ID 1 "Костюмы" - категория с ID 11 "Одежда" - категория с ID 12 "Акции и скидки" - категория с ID 13 Тогда в связывающей таблице будет три записи: | product_id | category_id | | 1 | 11 | | 1 | 12 | | 1 | 13 | Запрашиваем все товары нужно категории (например, костюмы c ID 11) SELECT `product_id` FROM `product_to_category` WHERE `category_id` = 11 Получим ID товаров, входящие в категорию с ID 11 Надіслати Поділитися на інших сайтах More sharing options... IhorDod Опубліковано: 12 жовтня 2018 Автор Share Опубліковано: 12 жовтня 2018 Согласен, не прав. Уточню. ТЗ не мое и составлено заказчиком. Задача: Написать запрос и в этом случае, то-есть зная только id категории получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. Все остальное (все что уже сделал) описано выше. Вот мой запрос SELECT * FROM products inner join products_categories on products.id = products_categories.product_id inner join categories on products_categories.categorie_id = categories.id where categorie_id = 1; Но это я получаю товар который есть в в этой категории ( например ОДЕЖДА). А как выполнить условие Цитата получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. ВОт тут у меня ступор. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 от версии зависит. не ясно, что значит в дополнительных. если в дополнительных = дочерних, то уверен этот запрос уже есть в движке Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 ой бида Попробуйте еще раз сформулировать задание. Надіслати Поділитися на інших сайтах More sharing options... jaffagold Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 Если я верно понял, то надо В указанной категории( допустим ID категории = 20) перебирать товары Спойлер product_id category_id main_category 28 20 1 28 24 0 29 20 1 29 24 0 30 20 1 30 33 0 31 33 1 32 34 1 33 20 1 33 28 0 34 34 1 35 20 1 36 34 1 40 20 1 40 24 0 41 27 1 42 20 1 42 28 0 43 18 1 43 20 0 44 18 1 44 20 0 Если товар привязан только к данной категории, то его пропускаем ( товар с ID = 35 пропускаем) Если товар привязан еще к другим категориям, то что-то делаем (например, просто выводим Название и ID товара или в таблице Название и ID товара, и ID всех категорий, где он выводится), Например,( для категории с ID = 20) товары с ID 28, 30, 33, 40 и т.д. Надіслати Поділитися на інших сайтах More sharing options... 100napb Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 (змінено) попробуйте вот так. для своего удобства и самопроверки, использовал стандартные таблицы oc. Уверен, под свои таблички подгоните. Результаты удобно, например, explode'ить, что бы разобрать из строки на отдельные значения Spoiler SELECT p.model AS 'product model name' ,(SELECT GROUP_CONCAT(optc.category_id) FROM oc_product_to_category optc WHERE optc.product_id = p.product_id) AS 'ALL product catergories' FROM oc_product p, oc_product_to_category pc, oc_category c WHERE p.product_id = pc.product_id AND c.category_id = pc.category_id GROUP BY p.product_id HAVING COUNT(*) > 1 ORDER BY 2 ASC на выходе результат вроде такого - в строке перечислены все категории, в которые входит каждый продукт Spoiler А вообще, freelancer должен быть прав - в ОС 100% есть функция типа getProductCategories или что-то похожее. Конечно, она работает на родной структуре БД, на родных табличках. Но Вы можете подсмотреть, как там все устроено и сделать свою функцию с блэкджеком и прочим Змінено 13 жовтня 2018 користувачем 100napb Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Как создать правильный запрос в SQL? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
IhorDod Опубліковано: 12 жовтня 2018 Автор Share Опубліковано: 12 жовтня 2018 Согласен, не прав. Уточню. ТЗ не мое и составлено заказчиком. Задача: Написать запрос и в этом случае, то-есть зная только id категории получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. Все остальное (все что уже сделал) описано выше. Вот мой запрос SELECT * FROM products inner join products_categories on products.id = products_categories.product_id inner join categories on products_categories.categorie_id = categories.id where categorie_id = 1; Но это я получаю товар который есть в в этой категории ( например ОДЕЖДА). А как выполнить условие Цитата получить список товаров которые размещены не только в своих главных категориях, и в дополнительных. ВОт тут у меня ступор. Надіслати Поділитися на інших сайтах More sharing options...
freelancer Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 от версии зависит. не ясно, что значит в дополнительных. если в дополнительных = дочерних, то уверен этот запрос уже есть в движке Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 ой бида Попробуйте еще раз сформулировать задание. Надіслати Поділитися на інших сайтах More sharing options... jaffagold Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 Если я верно понял, то надо В указанной категории( допустим ID категории = 20) перебирать товары Спойлер product_id category_id main_category 28 20 1 28 24 0 29 20 1 29 24 0 30 20 1 30 33 0 31 33 1 32 34 1 33 20 1 33 28 0 34 34 1 35 20 1 36 34 1 40 20 1 40 24 0 41 27 1 42 20 1 42 28 0 43 18 1 43 20 0 44 18 1 44 20 0 Если товар привязан только к данной категории, то его пропускаем ( товар с ID = 35 пропускаем) Если товар привязан еще к другим категориям, то что-то делаем (например, просто выводим Название и ID товара или в таблице Название и ID товара, и ID всех категорий, где он выводится), Например,( для категории с ID = 20) товары с ID 28, 30, 33, 40 и т.д. Надіслати Поділитися на інших сайтах More sharing options... 100napb Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 (змінено) попробуйте вот так. для своего удобства и самопроверки, использовал стандартные таблицы oc. Уверен, под свои таблички подгоните. Результаты удобно, например, explode'ить, что бы разобрать из строки на отдельные значения Spoiler SELECT p.model AS 'product model name' ,(SELECT GROUP_CONCAT(optc.category_id) FROM oc_product_to_category optc WHERE optc.product_id = p.product_id) AS 'ALL product catergories' FROM oc_product p, oc_product_to_category pc, oc_category c WHERE p.product_id = pc.product_id AND c.category_id = pc.category_id GROUP BY p.product_id HAVING COUNT(*) > 1 ORDER BY 2 ASC на выходе результат вроде такого - в строке перечислены все категории, в которые входит каждый продукт Spoiler А вообще, freelancer должен быть прав - в ОС 100% есть функция типа getProductCategories или что-то похожее. Конечно, она работает на родной структуре БД, на родных табличках. Но Вы можете подсмотреть, как там все устроено и сделать свою функцию с блэкджеком и прочим Змінено 13 жовтня 2018 користувачем 100napb Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Как создать правильный запрос в SQL?
chukcha Опубліковано: 12 жовтня 2018 Share Опубліковано: 12 жовтня 2018 ой бида Попробуйте еще раз сформулировать задание. Надіслати Поділитися на інших сайтах More sharing options... jaffagold Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 Если я верно понял, то надо В указанной категории( допустим ID категории = 20) перебирать товары Спойлер product_id category_id main_category 28 20 1 28 24 0 29 20 1 29 24 0 30 20 1 30 33 0 31 33 1 32 34 1 33 20 1 33 28 0 34 34 1 35 20 1 36 34 1 40 20 1 40 24 0 41 27 1 42 20 1 42 28 0 43 18 1 43 20 0 44 18 1 44 20 0 Если товар привязан только к данной категории, то его пропускаем ( товар с ID = 35 пропускаем) Если товар привязан еще к другим категориям, то что-то делаем (например, просто выводим Название и ID товара или в таблице Название и ID товара, и ID всех категорий, где он выводится), Например,( для категории с ID = 20) товары с ID 28, 30, 33, 40 и т.д. Надіслати Поділитися на інших сайтах More sharing options... 100napb Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 (змінено) попробуйте вот так. для своего удобства и самопроверки, использовал стандартные таблицы oc. Уверен, под свои таблички подгоните. Результаты удобно, например, explode'ить, что бы разобрать из строки на отдельные значения Spoiler SELECT p.model AS 'product model name' ,(SELECT GROUP_CONCAT(optc.category_id) FROM oc_product_to_category optc WHERE optc.product_id = p.product_id) AS 'ALL product catergories' FROM oc_product p, oc_product_to_category pc, oc_category c WHERE p.product_id = pc.product_id AND c.category_id = pc.category_id GROUP BY p.product_id HAVING COUNT(*) > 1 ORDER BY 2 ASC на выходе результат вроде такого - в строке перечислены все категории, в которые входит каждый продукт Spoiler А вообще, freelancer должен быть прав - в ОС 100% есть функция типа getProductCategories или что-то похожее. Конечно, она работает на родной структуре БД, на родных табличках. Но Вы можете подсмотреть, как там все устроено и сделать свою функцию с блэкджеком и прочим Змінено 13 жовтня 2018 користувачем 100napb Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
jaffagold Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 Если я верно понял, то надо В указанной категории( допустим ID категории = 20) перебирать товары Спойлер product_id category_id main_category 28 20 1 28 24 0 29 20 1 29 24 0 30 20 1 30 33 0 31 33 1 32 34 1 33 20 1 33 28 0 34 34 1 35 20 1 36 34 1 40 20 1 40 24 0 41 27 1 42 20 1 42 28 0 43 18 1 43 20 0 44 18 1 44 20 0 Если товар привязан только к данной категории, то его пропускаем ( товар с ID = 35 пропускаем) Если товар привязан еще к другим категориям, то что-то делаем (например, просто выводим Название и ID товара или в таблице Название и ID товара, и ID всех категорий, где он выводится), Например,( для категории с ID = 20) товары с ID 28, 30, 33, 40 и т.д. Надіслати Поділитися на інших сайтах More sharing options...
100napb Опубліковано: 13 жовтня 2018 Share Опубліковано: 13 жовтня 2018 (змінено) попробуйте вот так. для своего удобства и самопроверки, использовал стандартные таблицы oc. Уверен, под свои таблички подгоните. Результаты удобно, например, explode'ить, что бы разобрать из строки на отдельные значения Spoiler SELECT p.model AS 'product model name' ,(SELECT GROUP_CONCAT(optc.category_id) FROM oc_product_to_category optc WHERE optc.product_id = p.product_id) AS 'ALL product catergories' FROM oc_product p, oc_product_to_category pc, oc_category c WHERE p.product_id = pc.product_id AND c.category_id = pc.category_id GROUP BY p.product_id HAVING COUNT(*) > 1 ORDER BY 2 ASC на выходе результат вроде такого - в строке перечислены все категории, в которые входит каждый продукт Spoiler А вообще, freelancer должен быть прав - в ОС 100% есть функция типа getProductCategories или что-то похожее. Конечно, она работает на родной структуре БД, на родных табличках. Но Вы можете подсмотреть, как там все устроено и сделать свою функцию с блэкджеком и прочим Змінено 13 жовтня 2018 користувачем 100napb Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts