Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
关于属性选项ID的小事情的数据库或php代码?_Php_Mysql - Fatal编程技术网

关于属性选项ID的小事情的数据库或php代码?

关于属性选项ID的小事情的数据库或php代码?,php,mysql,Php,Mysql,用户配置文件。我有一些属性只有2或3个选项。例如,我将表中的性别存储为tinyint(男性=1,女性=2)。所以在表中我有tinyint,但在前端我需要显示string。我有大约4个属性,只有大约2个选项 因此,我有两个选项来显示选项中的字符串: 创建将存储所有属性选项的额外表。但在这种情况下,每次额外加入时,我都需要为这样一个小东西创建 或者我可以在profile_helper.php中为这种属性添加所有函数。比如说 function getGender($optionId){ $gend

用户配置文件。我有一些属性只有2或3个选项。例如,我将表中的性别存储为tinyint(男性=1,女性=2)。所以在表中我有tinyint,但在前端我需要显示string。我有大约4个属性,只有大约2个选项

因此,我有两个选项来显示选项中的字符串:

创建将存储所有属性选项的额外表。但在这种情况下,每次额外加入时,我都需要为这样一个小东西创建

或者我可以在profile_helper.php中为这种属性添加所有函数。比如说

function getGender($optionId){
  $gender = $optionId == 1 ? "male" : "female";
  return $gender;
}

说到性能,为这么小的事情做额外的连接是否值得

我肯定会选择SQL路线。将来更具可扩展性。显然,这不是性别问题,但取决于其他选择,这可能会为你节省一些时间。比如:

SELECT tblGender.gender FROM tblGender, tblUser WHERE tblUser.genderID = tblGender.genderID AND tblUser.userID = "x"

你可以让你的生活更轻松,所有的可能性都可以,就像这样:

`gender` ENUM( 'MALE', 'FEMALE')
这样,您就可以将值
'MALE'
'FEMALE'
插入到数据库中,当您从数据库检索值时,您将返回其中一个字符串,您可能需要的唯一帮助函数是or


我只推荐这种方法用于那些不太可能改变的事情(性别就是一个很好的例子)。

我不喜欢属性表。SQL也没有进行优化。有些东西应该规范化为另一个表。有些事情不应该。这实际上取决于你的结构和你想做什么


就性别而言,如果你正在构建一个多语言应用程序,它需要映射到你的语言工具,因此数据库中的函数、常量或枚举对于任何不太可能更改的数据来说都是很好的。

好吧,这取决于你的语言工具。如果是性别问题,它肯定不会增长——常数类是我会做的事情

class Constants {

    public static $gender = array(0 => 'male', 1 => 'female');

    public static function getGender( $value ) {

        if ( !empty(self::$gender[$value])) {
            return self::$gender[$value];
        }
    }
}
非常有用,如果您想封装并执行,即:

echo Constants::getGender($user->gender);
如果您希望值经常更改,请选择SQL方式,因为硬编码不好,除非它是一个“类似性别”的问题

IMHO,没必要这样做,因为性别永远不会超过男性和女性


干杯

我想要第二张桌子。它灵活、可扩展、易于更改或添加性别(即,未指定)


就性能而言,它仍然非常高效。这看起来很愚蠢,因为现在只有两个值,但这并不意味着不应该遵循规范化规则。

答案取决于属性更改的可能性。如果static eg(gender)@nickb是有意义的,否则我建议的方法可能会更好。你的数据库(以及哪个数据库)和代码中有两双鞋。你的大部分代码不应该关心用户是否被存储以及如何被存储。我认为,虽然他说的是一个属性表,它将为用户存储属性,而不是一个特定的genderI表,我只是读取。最后,作者得出结论:“正如您所看到的,ENUM和VARCHAR的结果几乎相同,但是连接查询的性能要低30%。”。如果是这样的话,为什么我还要在这种情况下使用ENUM,为什么不简单地放置varchar呢?原因有很多。1) 那篇文章是在2008年写的,2)ENUM限制了可能性,因为VARCHAR会接受任何东西,3)我高度怀疑这是否会被认为是应用程序的瓶颈。如果在分析和查询优化之后,确定这是瓶颈,那么您的应用程序必须非常高效,此时您可以直接转换到VARCHAR而不会丢失列值。4) ENUM很简单(在DB中查找一个,谁知道(0,1)中的哪一个对应于(男性,女性))
SELECT person.id, gender.name
FROM person
INNER JOIN gender
ON person.genderid = gender.id