首先,我想爲提供這樣一個弱題目道歉;我無法用更好的方式來描述它。MYSQL - 根據一定的條件輸出額外的列
考慮以下幾點:我們有三個表,一個爲users
,一個爲records
,一個用於ratings
。該表是相當不言自明的,但對於數據庫的模式是如下:
+---------------------+
| Tables_in_relations |
+---------------------+
| records |
| ratings |
| users |
+---------------------+
爲records
表的方案是如下:
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(256) | NO | | NULL | |
| year | int(4) | NO | | NULL | |
+----------+----------------------+------+-----+---------+----------------+
爲users
表的方案是如下:
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| email | varchar(256) | NO | | NULL | |
| name | varchar(256) | NO | | NULL | |
| password | varchar(256) | NO | | NULL | |
+----------+----------------------+------+-----+---------+----------------+
ratings
表是obviusiusly,其中的評級與record_id和user_id存儲在一起,並作爲關係工作n表。
它的模式是如下:
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| record_id| smallint(5) unsigned | NO | MUL | NULL | |
| user_id | smallint(5) unsigned | NO | MUL | NULL | |
| rating | int(1) | NO | | NULL | |
+----------+----------------------+------+-----+---------+----------------+
現在,在我的申請,我有一個獲取基於某個關鍵字記錄的搜索功能。輸出結果還應包括某條記錄的平均評分和每條記錄的總評分。這可以通過下面的查詢來實現:
SELECT re.id, re.title, re.year, ROUND(avg(ra.rating)) as avg_rate,
COUNT(ra.record_id) as total_times_rated
FROM records re
LEFT JOIN ratings ra ON ra.record_id = re.id
GROUP BY re.id;
,這將給我下面的輸出:
+----+------------------------+------+----------+-------------------+
| id | title | year | avg_rate | total_times_rated |
+----+------------------------+------+----------+-------------------+
| 1 | Test Record 1 | 2008 | 3 | 4 |
| 2 | Test Record 2 | 2012 | 2 | 4 |
| 3 | Test Record 3 | 2003 | 3 | 4 |
| 4 | Test Record 4 | 2012 | 3 | 3 |
| 5 | Test Record 5 | 2003 | 2 | 3 |
| 6 | Test Record 6 | 2006 | 2 | 3 |
+----+------------------------+------+----------+-------------------+
問:
現在,來了棘手的部分,至少對我來說。在我的應用程序中,您可以搜索記錄是否登錄,如果登錄,我還想在上述查詢中包含用戶自己的評分值。
我知道我可以通過讀取會話值並根據該值執行相應的查詢來運行條件來檢查用戶是否登錄。我只是不知道如何將某個用戶的個人評價值包含到上述查詢中。
你如何計算用戶的評分?它是所有匹配記錄評級的「SUM」嗎? –
這是個人價值。每次用戶對一條記錄進行評分時,它都會存儲在「收視率」表中(record_id,user_id和實際費率) –
這樣做的目的是用戶可以查看他/她自己的評級值,如果他/根據關鍵字進行記錄。 –