我正在建立一個網站,用戶提交屏幕錄像並將其與標籤進行關聯。如何向查找最流行記錄的查詢添加例外情況?
這裏有3個表組成的數據庫:
Screencasts:
| screencastId | title |
|--------------|--------------------------------------------------|
| CF9S4QZuV30 | Go Programming |
| ef-6NZjBtW0 | How to Make Android Apps |
| F3WpBsc0QEw | Git & GitHub: Creating a Repository (2/11) |
| Ggh_y-33Eso | Learn HTML in 15 Minutes |
| GrycH6F-ksY | jQuery Tutorials: Submitting a Form with AJAX |
| N4mEzFDjqtA | Python Programming |
| QRmmISj6Rrw | Learn PHP: Your first file |
| WPvGqX-TXP0 | Java Programming |
| wz3kElLbEHE | SASS Tutorial |
| Xx-XZwJT76w | Setting Up A Development Environment With Bowery |
Tags:
| tagName |
|---------|
| Android |
| Bowery |
| Git |
| Go |
| Html |
| Java |
| jQuery |
| PHP |
| Python |
| Sass |
ScreencastTags
| screencastId | tagName |
|--------------|---------|
| CF9S4QZuV30 | Go |
| ef-6NZjBtW0 | Android |
| ef-6NZjBtW0 | Java |
| F3WpBsc0QEw | Git |
| Ggh_y-33Eso | Html |
| GrycH6F-ksY | jQuery |
| N4mEzFDjqtA | Python |
| QRmmISj6Rrw | PHP |
| WPvGqX-TXP0 | Java |
| wz3kElLbEHE | Sass |
| Xx-XZwJT76w | Bowery |
該網站允許用戶查看最熱門的標籤:
我用它來查詢確定這9個最熱門的標籤如下:
SELECT t.tagName
FROM tags t
JOIN screencastTags m
ON m.tagName = t.tagName
GROUP BY t.tagName
ORDER BY COUNT(*) DESC, t.tagName DESC
LIMIT 9
正如你所看到的,有一個第10菜單項標題爲其他。當點擊時,用戶被顯示屏幕錄像,其標籤是而不是之間的9個最流行的。
我用它來確定這些截屏查詢如下:
SELECT
v.screencastId,
v.title,
GROUP_CONCAT(m.tagName) as tags
FROM screencasts v
JOIN screencastTags m
ON v.screencastId = m.screencastId
WHERE m.tagName NOT IN (
SELECT * FROM (
SELECT t.tagName
FROM tags t
JOIN screencastTags m
ON m.tagName = t.tagName
GROUP BY t.tagName
ORDER BY COUNT(*) DESC, t.tagName DESC
LIMIT 9) as t)
GROUP BY v.screencastId
ORDER BY v.ReferralCount DESC
不幸的是,這個查詢請求也表現爲我本來希望。它的結果如下表所示:
| screencastId | title | tagName |
|--------------|--------------------------|---------|
| ef-6NZjBtW0 | How to Make Android Apps | Android |
我想它返回此表:
| screencastId | title | tagName |
|--------------|--------------------------|---------------|
| ef-6NZjBtW0 | How to Make Android Apps | Android, Java |
如何實現在這種情況下,預期的結果?
正如您所看到的,子查詢返回9個最受歡迎的標籤,其中包括標籤Java。因爲查詢返回的截屏,其標籤子查詢結果不,標籤的Java不包括在內。它應該是,因爲截屏被標記爲的Android和的Java。 的Android不是9個最熱門的標籤之一,的Java是。
謝謝你的回答,戈登。對此,我真的非常感激。我現在正在測試這個,但是,我得到這個錯誤:'錯誤代碼:1054.'在子句'中的未知列'm.tags'。 –
我將該行更改爲'ON m.tagName = tags9.tagname',並且查詢沒有返回任何行:(。 –
@Angularnoob ...。這表明所有屏幕演員至少有九個原始標籤中的一個 –