爲簡單起見,我將離開與問題無關的字段。限制固定數量類別的固定行數
我的表結構,
新聞
news_id | parent_category | child_category
類別
category_id | maincategory_name
子類別
subcategory_id | subcategory_name
因爲它已經很明顯,category_id
鏈接到parent_id
和subcategory_id
鏈接到news
表child_category
。
我有什麼權利現在
SELECT *
FROM (
SELECT news . * , @rn :=
CASE WHEN @child_category = child_category
THEN @rn +1
ELSE 1
END AS rn, @child_category := child_category
FROM news, (
SELECT @rn :=0, @child_category := NULL
) AS vars
ORDER BY child_category
) AS T1
LEFT JOIN category ON parent_category = category.category_id
LEFT JOIN subcategory ON child_category =
subcategory.subcategory_id
WHERE rn <=12 AND parent_category = (SELECT category_id FROM
category WHERE maincategory_name='ukraine') AND
child_category!= (SELECT `subcategory_id` FROM subcategory
WHERE `subcategory_name` = 'kiev')
ORDER BY category.category_id DESC
上面的SQL工作和每個類別取12行。
問題 我現在面臨的問題是,查詢從每個類別中提取數據。我想限制這個類別的數字爲2或3.例如如果subcategory
表中有8個子類別,它將從所有這些子類中獲取數據。我想限制提取限制,比如3(任何3個類別)。
我使用IN
語句在以下試過,
SELECT *
FROM (
SELECT news . * , @rn :=
CASE WHEN @child_category = child_category
THEN @rn +1
ELSE 1
END AS rn, @child_category := child_category
FROM news, (
SELECT @rn :=0, @child_category := NULL
) AS vars
ORDER BY child_category
) AS T1
LEFT JOIN category ON parent_category = category.category_id
LEFT JOIN subcategory ON child_category =
subcategory.subcategory_id
WHERE rn <=12 AND parent_category = (SELECT category_id FROM
category WHERE maincategory_name='ukraine') AND
child_category IN (2,4)
ORDER BY category.category_id DESC
其中IN range
將由一個子查詢檢索。在邏輯上,如果我將這個子查詢限制爲3個結果,我的工作就完成了。但事實證明,IN
語句不支持子查詢中的LIMIT
子句。
所以問題是,什麼是檢索數據(固定,但我已經想通了)從有限數量的類別解決方法。
sameple數據
新聞表
| news_id | parent_category | child_category
| 1 | 1 | 1
| 2 | 1 | 2
分類表
| category_id | maincategory_name
| 1 | Ukraine
| 2 | Russia
| 3 | Belarus
子類別表
| subcategory_id | subcategory_name
| 1 | Kiev
| 2 | Odessa
| 3 | Moscow
| 4 | Simferopol
| 5 | Dnipropetrovsk
結果應該是這樣的.....
假設基輔,敖德薩,辛菲羅波爾和Dnipropetrovsk的進入maincategory 1即烏克蘭,我想2個大類不含基輔(即結果應包含辛菲羅波爾和第聶伯河或敖德薩和第聶伯河或敖德薩和辛菲羅波爾)
問題是,查詢將獲取所有3個類別(或更多如果可用),其中作爲我只想2(或3在t輸入法)。
進一步INFO
SQL撥弄
create table News(news_id int, parent_category int, child_category int);
insert into News values (1,1,1), (2,1,2), (3,1,2), (4,1,4),(5,1,4), (6,1,5), (7,2,3), (8,1,5), (9,1,2);
create table Category(category_id int, maincategory_name varchar(100));
insert into Category values (1, 'Ukraine'), (2, 'Russia'), (3, 'Belarus');
create table Subcategory (subcategory_id int, subcategory_name varchar(100));
insert into Subcategory values (1, 'Kiev'), (2, 'Odessa'), (3, 'Moscow'), (4, 'Simferopol'), (5, 'Dinipro');
樣本數據
GOAL
從上面的結果,我想實現如下:
取導致只能從一個主種類(即烏克蘭在這裏,並刪除俄羅斯),但它可以很容易地完成,所以沒有那個部分的擔心。
只抓取2個子類別(上面的設置包含3個子類別,敖德薩,辛菲羅波爾和第聶伯羅,我只需要其中的任何兩個)。我可以硬編碼它來檢索它,但我會在其他地方使用這個相同的查詢,所以硬編碼將失敗的目的。
從上面提到的上述兩個子類別中,每個子類別應該獲得最多5行。 (我已經在我的問題的第一個查詢中實現了這一點)。
從上述2的要求,我沒有達到。 1和不。 3.我卡在哪裏的是2號。 從結果集中,我無法獲取僅包含2個子類別的結果。 和結果集輸出數據包含所有可用的類別。 (在這裏,只有3個子類別,所以結果包含全部3個。如果將有10個子卡,它將檢索所有10個子卡數據)。我現在希望現在更清楚一點。
你能提供樣本數據嗎? – fancyPants
@tombom樣本數據已添加。 – itachi
@tombom更多信息已添加。 – itachi