Php MySQL数据结构与复选框类型数据的计算数据
假设您在一个公共类别中有多个布尔字段,那么哪种数据库存储方法在速度和处理(MySQL和PHP)方面都更有效 例如,如果选择一辆汽车,您可能会有一个“选项”类别,其中包含以下选项: (GPS、牵引组件、雷达、动力转向)。所有选项都是布尔字段,必须回答,并且必须是Php MySQL数据结构与复选框类型数据的计算数据,php,mysql,data-structures,boolean,boolean-operations,Php,Mysql,Data Structures,Boolean,Boolean Operations,假设您在一个公共类别中有多个布尔字段,那么哪种数据库存储方法在速度和处理(MySQL和PHP)方面都更有效 例如,如果选择一辆汽车,您可能会有一个“选项”类别,其中包含以下选项: (GPS、牵引组件、雷达、动力转向)。所有选项都是布尔字段,必须回答,并且必须是TRUE或FALSE 是否最好为每个字段设置一个表: CREATE TABLE IF NOT EXISTS `manycars` ( `vin` int(10) unsigned NOT NULL AUTO_INCREMENT, `
TRUE
或FALSE
是否最好为每个字段设置一个表:
CREATE TABLE IF NOT EXISTS `manycars` (
`vin` int(10) unsigned NOT NULL AUTO_INCREMENT,
`hasGps` tinyint(1) NOT NULL COMMENT '1= TRUE, 0=FALSE',
`hasTow` tinyint(1) NOT NULL COMMENT '1= TRUE, 0=FALSE',
`hasRadar` tinyint(1) NOT NULL COMMENT '1= TRUE, 0=FALSE',
`hasPsteer` tinyint(1) NOT NULL COMMENT '1= TRUE, 0=FALSE',
PRIMARY KEY (`vin`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
或者选择一个名为“选项”的字段,该字段具有位式数据存储,例如:
CREATE TABLE IF NOT EXISTS `singlecars` (
`vin` int(10) unsigned NOT NULL AUTO_INCREMENT,
`options` int(3) unsigned NOT NULL COMMENT '1= GPS, 2=Tow, 4=radar, 8=psteer',
PRIMARY KEY (`vin`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
为了确定每个布尔值,我将进行查询,例如SELECT options,vin FROM singlecars
并提取:
$q=SELECT options, vin FROM singlecars
$r=mysqli_query($dbconnect, $q);
while($record = mysqli_fetch_array($r, MYSQLI_ASSOC)){
$option=decbin($record['options']; // returns binary
$gps=substr($option,3,1);
$tow=substr($option,2,1);
$radar=substr($option,1,1);
$psteer=substr($option,0,1);
echo "GPS=$gps, Tow package=$tow, Radar=$radar, Power Steering=$psteer <br />";
}
$q=选择选项,来自单车的vin
$r=mysqli\u查询($dbconnect,$q);
而($record=mysqli\u fetch\u数组($r,mysqli\u ASSOC)){
$option=decbin($record['options'];//返回二进制
$gps=substr($option,3,1);
$tow=substr($option,2,1);
$radar=substr($option,1,1);
$psteer=substr($option,0,1);
echo“GPS=$GPS,牵引组件=$Tow,雷达=$Radar,动力转向=$psteer
”;
}
我的想法是,第一个表“manycars”具有更好的语义,查询速度快,编写查询所需的php代码最少。然而,第二个表“singlecars”使用较少的SQL结构,并且在所有选项都是布尔值的情况下,可能每次都需要
这是一个理论上的例子,但我对每种方法的利弊都感兴趣。我会选择每个选项都有单独字段的变体
- 它更快:您不需要在while循环中使用
(这个 是一个你在处理问题时可能会减速的地方 大量数据)substr
- 它是灵活的:例如,您需要选择所有具有
雷达。
。就是这样选择…其中hasRadar=1