Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL数据结构与复选框类型数据的计算数据_Php_Mysql_Data Structures_Boolean_Boolean Operations - Fatal编程技术网

Php MySQL数据结构与复选框类型数据的计算数据

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, `

假设您在一个公共类别中有多个布尔字段,那么哪种数据库存储方法在速度和处理(MySQL和PHP)方面都更有效

例如,如果选择一辆汽车,您可能会有一个“选项”类别,其中包含以下选项: (GPS、牵引组件、雷达、动力转向)。所有选项都是布尔字段,必须回答,并且必须是
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
    。就是这样

我没有考虑你的第二个要点;这很有道理!回答得好!