Py学习  »  DATABASE

Mysql根据每个用户的偏好选择不同的用户,请用这个简单的示例帮助我

Enfield li • 3 年前 • 1215 次点击  

假设我有一个用户和首选项表,以及一个桥接表 user_preference 两者之间:

/* user table:  */
+----------+--------------+
| Field    | Type         |
+----------+--------------+
| id       | int          |
| username | varchar(255) |
+----------+--------------+

/*  preference table: */
+------------+--------------+
| Field      | Type         |
+------------+--------------+
| preference | varchar(255) |
+------------+--------------+

/* user_preference table:  */
+-----------------+--------------+
| Field           | Type         |
+-----------------+--------------+
| user_id         | int          |
| preference_name | varchar(255) |
+-----------------+--------------+

例如,有3种偏好可供选择:“游泳”、“看电视”、“骑自行车”。一个用户可以拥有零个或全部3个首选项,这反映在 user\u首选项 桌子

现在我想查询10个不同的用户,包括他们各自的首选项(null或多个首选项),如何为此构造select语句?

到目前为止,我已经尝试过这样的方法:

SELECT u.*, p.preference_name 
FROM user u 
LEFT JOIN user_preference p ON p.user_id = u.id
LIMIT 10;

/* Result:  */
id | username | preference_name

1  | user1    | swimming
1  | user1    | cycling
2  | user2    | null
3  | user3    | watching TV
... /* rest of the result  */

如您所见,结果将返回一个副本 user1 ,并且不会有10个不同的用户。我知道 distinct group by 关键字,它不能解决问题,因为它只会返回用户的单个首选项,而用户可以有多个首选项。

如何使用一条select语句实现这一点?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/135277
 
1215 次点击  
文章 [ 1 ]  |  最新文章 3 年前