За последние 24 часа нас посетили 18064 программиста и 1700 роботов. Сейчас ищет 1501 программист ...

Выборка уникальных значений

Тема в разделе "PHP и базы данных", создана пользователем AlfOz, 5 окт 2020.

  1. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    Имеется таблица базы данных товаров всего из двух столбцов - id_товара, id_категория_товара. Товар может находиться в нескольких категориях.
    Мне необходимо сделать выборку товаров, которые входят в определенную категорию (например id_товара=64), и еще куда-нибудь, исключая тех, кто входит только в id_товара=64.
    Помогите, пожалуйста, советом!
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Второй абзац не понял.
     
    #2 Drunkenmunky, 5 окт 2020
    Последнее редактирование: 5 окт 2020
  3. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    Ну, например. Товар с id 133 входит в категории 64, 68, 72... А товар с id 134 входит только в категорию 64. Меня интересует первый.
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.857
    Симпатии:
    748
    Адрес:
    Татарстан
    Distinct, count и иже с ними
     
  6. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    @ADSoft, я так и предполагал. Но помогите сотавить запрос. Я делаю так:
    Код (Text):
    1. SELECT DISTINCT `product_id` FROM `table` WHERE `category_id` = 64;
    Вот только не понимаю, как мне добавить еще одно правило, что кроме `category_id` = 64, должны быть и другие идентификаторы. А если их нет, то нет то данный продукт не включать в выборку.
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.857
    Симпатии:
    748
    Адрес:
    Татарстан
    оформите тут - http://sqlfiddle.com/
    таблицу, значений с десяток... и свой запрос
    ну а мы потом помогем
     
  8. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    Прошу прощения, не разобрался как сохранить информацию на данном сайте.
    С вашего позволения запощу эти запросы здесь.

    Создание таблицы:
    Код (Text):
    1. CREATE TABLE IF NOT EXISTS `category` (
    2.   `prooduct_id` int(11) NOT NULL,
    3.   `category_id` int(11) NOT NULL
    4. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    5.  
    6. INSERT INTO `category` (`product_id`, `category_id`) VALUES
    7. (122, 64),
    8. (122, 65),
    9. (122, 66),
    10. (123, 64),
    11. (124, 64),
    12. (125, 64),
    13. (125, 70),
    14. (125, 18),
    15. (126, 64),
    16. (127, 64),
    17. (127, 69);
    Запрос:
    Код (Text):
    1. SELECT DISTINCT `product_id` FROM `category` WHERE `category_id` = 64
     
  9. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Я ж давал вам ссылку, там дано решение, всё, что нужно было сделать - подставить свои значения

    Код (Text):
    1. SELECT `prooduct_id` FROM `category`
    2.   GROUP BY `prooduct_id`
    3.   HAVING COUNT(DISTINCT `category_id`) > 1
     
  10. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    @Drunkenmunky, но в этом случае тупо выбирается все содержимое таблицы.
     
  11. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.857
    Симпатии:
    748
    Адрес:
    Татарстан
    Ой ли?, 123 и 124 не должны попасть
     
  13. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Так они и не попадают.
    Скрины я выложил. Не отображаются что ли?
     
  14. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    @ADSoft, да вы правы, не вся таблица выводится, а только те продукты, которые находятся в двух и более категориях. Однако, у меня задача сделать выборку под конкретную категорию товаров, а именно category_id = 64. То есть нужны товары находящиеся в этой и еще в каких нибудь категориях. А если он находится только в этой категории, то его не показывать.
     
  15. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Ну так вложите этот запрос:
    Код (Text):
    1. SELECT `prooduct_id` FROM `category`
    2.   GROUP BY `prooduct_id`
    3.   HAVING COUNT(DISTINCT `category_id`) > 1
    в условие например
    Код (Text):
    1. SELECT *
    2. FROM `category`
    3. WHERE `prooduct_id`
    4. IN (
    5. SELECT `prooduct_id`
    6. FROM `category`
    7. GROUP BY `prooduct_id`
    8. HAVING COUNT( DISTINCT `category_id` ) >1
    9. )
    10. AND `category_id` =64
     
  16. AlfOz

    AlfOz Активный пользователь

    С нами с:
    16 мар 2009
    Сообщения:
    15
    Симпатии:
    0
    Уважаемые @Drunkenmunky и @ADSoft!
    Сердечное вам спасибо за помощь, а еще больше за просветительскую работу. Все прекрасно работает.