2013-06-24 26 views
1

我想顯示前15個已用標題,其中後面有相應的文章數。在這一點上,它正在工作。然而,現在我想添加另一個'OR語句',這是查詢不斷加載的地方(直到我手動殺死它)。子查詢在添加OR語句時不斷加載

工作查詢:

SELECT 
    title, 
    title as t, 
    (SELECT count(id) FROM articles WHERE title = t) as nr 
FROM 
    articles 
GROUP BY 
    title 
ORDER BY 
    nr DESC 
LIMIT 
    15 

失敗查詢:

SELECT 
    title, 
    title as t, 
    (SELECT count(id) FROM articles WHERE title = t OR title = 'Example title') as nr 
FROM 
    articles 
GROUP BY 
    title 
ORDER BY 
    nr DESC 
LIMIT 
    15 

任何人一個想法,爲什麼這個查詢失敗的原因?

+0

你想用第二個「OR」來實現什麼?爲什麼要將它引入到相關子查詢中? – peterm

+0

@peterm這是一個搜索欄,您可以選擇多個標題進行過濾。所以當沒有選擇任何標題時,您會在標題名稱後面看到帶有標題的文章數量。但是在選擇之後,在每個標題後面,您將看到顯示的項目和之前點擊的項目的總數。因此,它會爲您預覽點擊此標題後搜索將顯示多少文章。 –

回答

0

試試這個

SELECT 
title, 
title as jt, 
(SELECT count(id) FROM articles WHERE (title = t OR title = 'Example title')) as nr 
FROM 
articles 
GROUP BY 
title 
ORDER BY 
nr DESC 
LIMIT 
15 
+0

試了一下,很遺憾沒有解決問題:( –

0

我認爲自聯接將你比每次執行的每一行的柱狀(SELECT COUNT())調用一個更好的工作。

SELECT 
     A1.title, 
     count(A2.ID) as NR 
    FROM 
     articles A1 
     JOIN articles A2 
      on A1.title = A2.title 
    GROUP BY 
     A1.title 
    ORDER BY 
     NR DESC 
    LIMIT 
     15 

現在,實施您的「或」條件。我認爲你所擁有的是將「OR」應用於所有標題的東西,所以你要爲每一個條目都計算一次,並獲得相同的PLUS,無論它是從它自己的標題匹配中獲得的。

我認爲你的真正意思是你想要這個過濾器(WHERE標準)。您希望所有與「示例標題」類似的文章以及這些文章中與其「標題」內容相關的文章數量相同。如果是這種情況,只需添加到上面的查詢......

WHERE 
    A1.title = 'Example title' 

例...您的文章表中有像

Example SQL 
Example Query MySQL 
Example Query SQL-Server 
Example I dont care 
Example Query Oracle 
Example Query Oracle 11 
Example Query SQL-Server 2008 

所以標題,如果你正在尋找像「示例標題查詢「,您將獲得MySQL,SQL-Server,Oracle,Oracle 11,SQL-Server 2008的條目並完全忽略SQL和」我不在乎「的條目。這對你想要獲得的上下文有意義嗎?

+0

感謝您的嘗試,但這並不是我正在尋找的東西,也許這個標題的例子並不是最好的例子。使用類別 因此,在我的第一次搜索中,我選擇了包含500篇文章的cat#1,現在我需要查看所有其他類別,並在其後面有相應的文章nr。 2)將給我看貓#1(500)的結果加上貓#2的結果(比方說200),所以總共有700篇文章,這個數字700是我想要預測/顯示的 –

+0

@DiegoVoors,我會編輯你現有的文章,修改標題以更好地反映出來,然後提供一些你想要得到的數據樣本......即使你在層次模擬中顯示..不要使用標籤佈局,但空間作爲選項卡不格式良好。然後用大括號將其封閉,以便於閱讀。您可能會得到更接近您需求的更好答案。 – DRapp