PHP、MYSQL,根据 3 个下拉列表中的所有值为 true 选择结果

标签 php mysql

我有 2 个下拉列表和 1 个选择框,国家/地区(下拉列表)、地区(下拉列表)、性别(选择框 x 2)。

我的数据库看起来像这样(我已经减少了值的数量)

| id | england | usa | west | north | male | female | name | age |
|  1 |    1    |  0  |  1   |   0   |   0  |   1    | John |  33 |
|  2 |    0    |  1  |  0   |   1   |   0  |   1    | John |  56 |

除了 ID 和附加值之外,我需要查询的每个值都是 1 或 0(true 或 false)

我需要的结果是,如果有人选择英格兰、西部、男性,它会带回这些值为 true 的每一行(它们是我需要显示的这些行的额外信息)

我只需要一些关于如何实现此目的的指示,我正在考虑使用查找表,但正在努力使用具有多个值的查找表,或者我是否只使用 php 并将每个值设置为其正确的行名称并执行像这样的查询

最佳答案

首先

我怀疑您正在混合数据库中的架构(列名称)和值。

你的 table 应该更像

|id | country |region | gender |
--------------------------------
| 1 | usa     | north | male   |
| 1 | england | south | female |

考虑一下您要建模的事物具有哪些属性。 你的下拉菜单中已经有这个了。每个下拉列表都有该属性的可能值列表。

当您这样做时,您可能应该更进一步,将数据拆分到更多表中。

countries
|id | name   | other | columns | about | countries | eg. iso_code|
------------------------------------------------------------------
| 1 | USA    | ....  |  .....  | ..... | ......    | us          |
| 2 | England| ....  |  .....  | ..... | ......    | uk          |

regions
| id | name      |
------------------
| 1  | north     |
| 2  | south     |
| 3  | east      |
| 4  | west      |
| 5  | south-west|
| .. | ....


users
|id | name | country_id |region_id | gender |
---------------------------------------------
| 1 | John | 1          | 1        | m      |
| 2 | Mary | 2          | 4        | f      |

然后,您必须想出将数据从旧系统转换到新系统的方法。

首先从原表中接管一些数据

 INSERT INTO new_users (id,name) SELECT id, name FROM old_users;

这将在新表中插入与原始表具有相同 ID 的名称。

为查找表创建数据(在本例中为国家和地区)

 INSERT INTO countries (name,iso_code) VALUES
    ('USA','us'),
    ('United Kingdom','uk'),
    ....

然后更新您的字段

 UPDATE new_users 
     FROM new_users INNER JOIN old_users ON old_users.id = new_users.id 
 SET new_users.country_id = 1 WHERE old_users.usa =1;

 UPDATE new_users 
     FROM new_users INNER JOIN old_users ON old_users.id = new_users.id 
 SET new_users.country_id = 2 WHERE old_users.england =1;
 ...
 etc...

 UPDATE new_users 
     FROM new_users INNER JOIN old_users ON old_users.id = new_users.id 
 SET new_users.region_id = 1 WHERE old_users.north =1;

 UPDATE new_users 
     FROM new_users INNER JOIN old_users ON old_users.id = new_users.id 
 SET new_users.region_id = 2 WHERE old_users.west =1;
 ...

一旦你排序了......

您的下拉列表应该类似于..(您可以通过列出所有值及其名称,从查找表(例如国家)自动生成下拉列表)
当您向表格中添加新国家/地区时,从现在开始它们将自动显示在下拉列表中。

<?php  
....
while ($resultrow = $result->fetch_assoc()){ ?>
   <option value="<?php echo $resultrow['id'] ?>">
      <?php echo $resultrow['name']; ?></option>
}

您最终应该在 html 输出中得到类似以下内容的内容。

<select>
  <option value="1">USA</option>
  <option value="2">UK</option>
</select>

那么您的搜索查询应如下所示:

$sql ="SELECT * FROM table 
         WHERE `country_id`= '$country_id'
           AND `region_id`= '$region_id'
           AND `gender`= '$gender'";

关于PHP、MYSQL,根据 3 个下拉列表中的所有值为 true 选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761958/

相关文章:

javascript - 通过 javascript 传递变量但在 php 中未获取它?

Mysql错误不遵循where条件

MySQL getpolygon函数错误

mysql - 从 MySQL 导入到 Excel 的 CSV 在日期末尾留下 "/"

php - Mysql 没有保存带有 ' 字符的答案

php - 根据所选月份动态显示 SQL COUNT

php - 了解 "post/redirect/get"模式

javascript - 如何将文本文件处理为 Google map 航点 + 信息文本

php - 我的 MYSQL 注入(inject)语句是否容易受到攻击?

javascript - 形成多行插入的数组格式nodejs-mysql