2010-01-10 55 views
0

這是種的mysql not in or value=0?如何只顯示一個重複?

這個問題的一個擴展我有兩個數據庫之一具有微件信息,而另一個是根據該模塊的那些部件的佈局。在頁面上我有列表來放置這些小部件,例如Header,Content,Sidebar和Footer。還有一個未被使用的小部件列表。那是我遇到問題的地方。

這裏是我使用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' 

這顯示所有不具有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

您可以將列與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 
+0

+1。 GROUP BY或DISTINCT是合併重複項的兩種方式。 – 2010-01-10 19:11:32

+0

我試過這個,我仍然得到了widget#3的重複。任何其他建議? – WAC0020 2010-01-11 14:49:35

+0

你可以用你回來的完整結果編輯你的問題嗎? – 2010-01-11 15:01:03