Как показать только один дубликат?

Это своего рода расширение этого вопроса mysql не в или значение=0?

У меня есть две базы данных, одна из которых содержит информацию о виджетах, а другая — расположение этих виджетов в соответствии с модулем. На странице у меня есть списки для размещения этих виджетов, таких как заголовок, контент, боковая панель и нижний колонтитул. Также есть список виджетов, которые не используются. Вот где у меня проблема.

Вот mysql, который я использую:

SELECT *
FROM widgets AS w
    LEFT JOIN widget_layouts AS wl
        ON w.id = wl.widget_id
WHERE wl.widget_id IS NULL
    OR wl.module_id <> '2'

Это отображает все виджеты, у которых module_id не равен 2. Поэтому, если я помещу один из виджетов в другой список, он все равно будет отображаться в списке неиспользуемых виджетов, потому что он также используется другим виджетом.

Вот таблица widget_layouts:

|Module_id | Widget_id | Position | Weight|
-------------------------------------------
|2         |3          |1         |0      |
|1         |9          |3         |3      |
|1         |8          |3         |2      |
|1         |3          |2         |1      |

Итак, вот вопрос:

Как отобразить список виджетов, которые не используются модулем 2 или не существуют?

РЕДАКТИРОВАТЬ:

Я собираюсь попытаться прояснить то, что я пытаюсь сделать. Я хочу, чтобы в списке отображались виджеты, которых нет в списке, и виджеты, не используемые модулем 2, но если они используются модулем 2, то не отображайте этот виджет.

У меня есть два списка: один для контента, а другой для отображения доступных виджетов. Поэтому, когда я перетаскиваю виджет 3 из списка виджетов в список содержимого. Затем при обновлении браузера отображаются два виджета 3, один в списке содержимого и один в списке доступных.

Итак, как мне показать виджеты, которых нет в базе данных, и если виджет используется модулем 2, он не отображается в списке доступных?


person WAC0020    schedule 10.01.2010    source источник


Ответы (1)


Вы можете группировать столбцы с одинаковыми значениями с помощью SQL:

SELECT widget_id
FROM widgets AS w
    LEFT JOIN widget_layouts AS wl
        ON w.id = wl.widget_id
WHERE wl.widget_id IS NULL
    OR wl.module_id <> '2'
    GROUP BY widget_id
person Jimmy Shelter    schedule 10.01.2010
comment
+1. GROUP BY или DISTINCT — это два способа объединения дубликатов. - person Frank Farmer; 10.01.2010
comment
Я попробовал это, и я все еще получаю дублирование виджета № 3. Любое другое предложение? - person WAC0020; 11.01.2010
comment
Можете ли вы отредактировать свой вопрос с полным результатом, который вы получите? - person Jimmy Shelter; 11.01.2010