基本上我需要创造一个用户与管理员的点比较它们的点而布置的输出TOP表之间的差异。 例如:SQL语句来显示每个用户选择一个用户选择
User3 | 0 //Everything was as admin had.
User5 | 3 //One song had 2 points different from admin and one was off by one
ect.
在我的数据库中,我有三个表:
Table: rating
+------------+---------+----------+---------+
| rating_id | user_id | song_id | points |
+------------+---------+----------+---------+
| 1 | 1 | 4 | 0 |
| 2 | 1 | 3 | 1 |
| 3 | 3 | 2 | 3 |
| 4 | 4 | 2 | 2 |
| 5 | 2 | 1 | 4 |
Table: songs
+---------------+------------+
| song_name_id | song_name |
+---------------+------------+
| 1 | Song1 |
| 2 | Song2 |
| 3 | Song3 |
| 4 | Song4 |
| 5 | Song5 |
Table: users
+----------+----------+----------+
| id | username | password |
+----------+----------+----------+
| 1 | User1 | passw |
| 2 | User2 | wordp |
| 3 | User3 | somet |
| 4 | User4 | hings |
应该是这样的(不是在任何编程语言):
Compare user_id > 1 with user_id=1 //Let's say that the comparable admin is user_id=1
$result= ABS(user.points-admin.points)++;
,并把这个到阵列:
username => result
然后,当我通过排序结果这阵,我可以打印它作为顶级表 - 谁得到最接近的结果联系!
我tryed几个不同的解决方案,但从来没有得到正确的结果。
任何人都可以帮助我吗?
UPDATE:
谢谢!
随着连接的结果是:
+------------+---------+----------+---------+-----------+
| song_id |song_name| user_id |username |rating_diff|
+------------+---------+----------+---------+-----------+
| 1 | Song1 | 1 | admin | 0 |
| 2 | Song2 | 1 | admin | 0 |
...etc...
随着LEFT JOIN的结果是:
+------------+---------+----------+---------+-----------+
| song_id |song_name| user_id |username |rating_diff|
+------------+---------+----------+---------+-----------+
| 1 | Song1 | 11 | user2 | NULL |
| 1 | Song1 | 10 | user1 | NULL |
| 1 | Song1 | 12 | user3 | NULL |
| 1 | Song1 | 1 | admin | 0 |
| 2 | Song2 | 11 | user2 | NULL |
| 2 | Song2 | 10 | user1 | NULL |
| 2 | Song2 | 12 | user3 | NULL |
| 2 | Song2 | 1 | admin | 0 |
..etc..
所以..东西是错误的,rating_diff不起作用。
哪个SQL(MySQL和甲骨文,PostgreSQL的,等等),您使用(变更上
rating r1
联接是左连接,如果你不能保证管理员等级,每首歌曲。)? – 2012-01-11 11:07:32