我有一个表,应该处理用户访问特定国家的客户。 用户可以只访问一个国家,也可以访问所有国家或两者之间的所有国家。
类似于:(1=访问,0不访问)
其余的是多个国家,如中国,英国和更多。 但也许只有一个成功的公关。 国家,所以决定在某个时候集中在一起。 不是聪明,而是它是什么。
|----|----|----|----|----------|
| DK | DE | NO | SE | The rest |
|----|----|----|----|----------|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 1 |
| 1 | 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| ... |
| ... |
| ... |
| 1 | 1 | 1 | 1 | 1 |
|----|----|----|----|----------|
有没有一种聪明的方法可以轻松地在php中键入查询,这样我就不用造很多if-句子了? 它可以用if实现,但是写起来很麻烦,如果需要做更改的话就更麻烦了。
所以我在想一定有更好的方法来做这件事。
您可以创建一个规范化的数据库视图,并根据需要对其进行查询:
CREATE VIEW `users_countries` AS
SELECT id, 'DK' AS `country` FROM users WHERE `DK` = 1 UNION ALL
SELECT id, 'DE' AS `country` FROM users WHERE `DE` = 1 UNION ALL
SELECT id, 'NO' AS `country` FROM users WHERE `NO` = 1 UNION ALL
SELECT id, 'SE' AS `country` FROM users WHERE `SE` = 1 UNION ALL
...
然后只需按用户id和国家/地区查询此视图,如:
SELECT id FROM `users_countries` WHERE id = 123 AND country = 'DE'