用户查询范围
当查询用户时,查询条件不是通过用户唯一ID查询,而是通过不唯一的条件查询。
例如:通过用户手机号查询用户。
用户的手机都是不同的,是唯一的。
- 项目只服务一家公司时,根据业务场景判断手机号可以确认为唯一性。
这种场景比较简单,查询用户时直接通过手机号即可:
SELECT * FROM WHERE user WHERE mobile = ?
- 项目服务多家公司,每家公司都有不同的用户群体。
查询所属某公司下的用户,单纯的只用手机号做条件会导致查询出不属于当前公司的用户。所以SQL需要增加条件。
// 是这个公司的 并且手机号是xxx
SELECT * FROM WHERE user WHERE mobile = ? AND vendor_id = ?
- 业务需求出现变化,用户被禁用后,可以再创建相同手机号的正常状态用户。
正常状态用户手机号是唯一的。
此时查询条件再次出现变化,需要查询正常状态的用户手机号只能有一个,禁用状态的用户可以出现多个。
SELECT * FROM WHERE user WHERE mobile = ?
AND vendor_id = ? AND sidable = false
总结
当服务于多家公司时,用户前台查询数据,每次必须要带上这个公司的vendor_id。代码里出现给用户前台做查询没有带vendor_id 只是 mobile = ? 或者 name = ? 一定是有问题的。