2016-12-03 74 views
0

我有一個文章網站,我有一個建議框,其中我建議閱讀更多文章。我想要做的是建議最相關的quizz,而不是挑選隨機文章並顯示它們。 因此,讓我們假設一位讀者是在一篇文章中的19號ID。在意見箱中,我想顯示那些也讀過第19號文章的人閱讀的文章。所以如果人A閱讀19,26,30和人B讀數爲19,所以他傾向於在第26,30號文章中多加註意。 我有一張桌子,我用它的用戶ID記錄用戶閱讀的每篇文章。Mysql複雜數據問題

ID/USER ID/ARTICLEID 
1/30  /10 
2/20  /10 
3/20  /80 
4/10  /10 
5/20  /60 
6/10  /60 
7/20  /80 
8/10  /90 

這裏是想:拿到一篇文章,用戶當前正在讀取的ID - >轉到數據庫並獲取所有誰看過這篇文章的網友ID - >獲取由被讀取的所有物品的ID這些用戶 - >按用戶的文章數量排序。 這真令人沮喪,因爲我沒有太多的mysql經驗。所以選擇的基本命令似乎不起作用,我正在尋求幫助或只是想法,我會尋找執行它們。 更新1:輸出需要

  • 獲取誰讀的文章編號10的用戶的用戶IDS:IDS:30/10/20
  • 看看還有哪些文章是由這個用戶閱讀:80(1個 用戶)/ 60(2user)/ 90(1USER)
  • 所以最終輸出:醫學ORDER:60/90/80
+0

後所需的輸出,以及看看有什麼預期爲好。 – Rahul

+0

@Rahul檢查更新並請讓我知道是否清楚 – Yassine

+0

看來你需要工作一些mysql教程網站。 – Drew

回答

1

我已製備的樣品。我幾乎可以肯定,這是你所搜索的。 我將描述它的一些碎片

完整查詢

SELECT count(`art_id`) as cnt, `art_id` 
FROM user_art 
WHERE `user_id` in (
     SELECT DISTINCT `user_id` 
     FROM user_art 
     WHERE `art_id` = 10 -- Current Article ID to find other user 
     AND user_id <> 20 -- Current User Id to exclude from list 
     ) 
GROUP by `art_id` 
ORDER BY cnt DESC , `art_id` DESC 
LIMIT 1; 

分步

輸入數據

mysql> SELECT * FROM user_art; 
+----+---------+--------+ 
| id | user_id | art_id | 
+----+---------+--------+ 
| 1 |  10 |  10 | 
| 2 |  20 |  30 | 
| 3 |  20 |  80 | 
| 4 |  10 |  90 | 
| 5 |  20 |  10 | 
| 6 |  23 |  10 | 
| 7 |  23 |  11 | 
| 8 |  23 |  12 | 
| 9 |  10 |  11 | 
+----+---------+--------+ 
9 rows in set (0,00 sec) 

mysql> 

找到所有用戶ID誰也讀SAM文章

mysql> select DISTINCT `user_id` 
    -> FROM user_art 
    -> WHERE `art_id` = 10 -- Current Article ID to find other user 
    -> AND user_id <> 20; -- Current User Id to exclude from list 
+---------+ 
| user_id | 
+---------+ 
|  10 | 
|  23 | 
+---------+ 
2 rows in set (0,00 sec) 

mysql> 

發現,通過用戶列表

閱讀所有文章發現,由用戶說明和文章ID DESC =>較高article_no的數量由用戶名單和順序閱讀所有文章=>新的文章

mysql> SELECT count(`art_id`) as cnt, `art_id` 
    -> FROM user_art 
    -> WHERE `user_id` in (10,23) 
    -> GROUP by `art_id` 
    -> ORDER BY cnt DESC , `art_id` DESC 
    -> ; 
+-----+--------+ 
| cnt | art_id | 
+-----+--------+ 
| 2 |  11 | 
| 2 |  10 | 
| 1 |  90 | 
| 1 |  12 | 
+-----+--------+ 
4 rows in set (0,00 sec) 

mysql> 

兩者comination查詢

comination與同時限制查詢只得到在下一篇文章

mysql> SELECT count(`art_id`) as cnt, `art_id` 
    -> FROM user_art 
    -> WHERE `user_id` in (
    ->   SELECT DISTINCT `user_id` 
    ->   FROM user_art 
    ->   WHERE `art_id` = 10 -- Current Article ID to find other user 
    ->   AND user_id <> 20 -- Current User Id to exclude from list 
    ->  ) 
    -> GROUP by `art_id` 
    -> ORDER BY cnt DESC , `art_id` DESC 
    -> LIMIT 1; 
+-----+--------+ 
| cnt | art_id | 
+-----+--------+ 
| 2 |  11 | 
+-----+--------+ 
1 row in set (0,00 sec) 

mysql> 
+0

只是完美的兄弟! – Yassine