提问者:小点点

使php和mysql查询处理WHERE部分中的“多项选择”的最聪明方法


我有一个表,应该处理用户访问特定国家的客户。 用户可以只访问一个国家,也可以访问所有国家或两者之间的所有国家。

类似于:(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实现,但是写起来很麻烦,如果需要做更改的话就更麻烦了。

所以我在想一定有更好的方法来做这件事。


共1个答案

匿名用户

您可以创建一个规范化的数据库视图,并根据需要对其进行查询:

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'