如何只显示一个副本?

时间:2010-01-10 19:07:11

标签: php mysql duplicates

这是mysql not in or value=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使用,它就不会显示在可用列表中?

1 个答案:

答案 0 :(得分: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