mysql - 如何识别和取消选择具有枚举数据类型的列的仅一个字符?

标签 mysql enums

我创建了一个过程,其中的列值具有枚举数据类型 asCompleteness_Type` ENUM('B', 'I', 'C', 'BC', 'BI', 'IC', 'BIC')

我编写了一个程序,我想显示在completeness_type列中没有“I”的所有视频游戏记录。下面是我写的程序

    USE `videogame_collection_3`;
    DROP procedure IF EXISTS `Get_Info_By_Games_missing_Something`;

      DELIMITER $$
                  USE `videogame_collection_3`$$
                 create PROCEDURE `Get_Info_By_Games_missing_Something`(IN  Completenessip     VARCHAR(15))
                BEGIN
                 SELECT 
                   video_game.Game_Name,
               video_game.Genre,
              mycollection.Purchase_Date,
               mycollection.Purchase_Price,
                   mycollection.`Condition`,
                     platform.Platform_Name,
                    mycollection.Completeness_Type
                     FROM
                  video_game
                   INNER JOIN
                   video_game_platform_mycollection ON video_game.Game_Id =      video_game_platform_mycollection.Game_Id
     INNER JOIN
                     platform ON video_game_platform_mycollection.Platform_Id =      platform.Platform_Id
                    INNER JOIN
                   mycollection ON   video_game_platform_mycollection.MyCollection_Id =      mycollect     `enter code here`ion.MyCollection_Id
             where  mycollection.Completeness_Type not like   concat('%',Completenessip,'%');
                END
              $$

                 DELIMITER ;

我正在调用程序

       call Get_Info_By_Games_missing_Something('I');   --- **It is working**
        call Get_Info_By_Games_missing_Something('BI');  -- **Not Working**
            call Get_Info_By_Games_missing_Something('BIC');  --**not working**

对于第一个示例:调用 Get_Info_By_Games_missing_Something('I'); 我想显示不包含“I”的completeness_type列,因此,completeness_type列中的记录必须是“B”,“C”,“BC”

对于第二次调用: 预期输出:调用 Get_Info_By_Games_missing_Something('BI'); 我想显示不包含'B','I','BI','IC','BC','BIC'的completeness_type列所以,completenenss_type列中的记录必须是'c'

第三次调用:调用 Get_Info_By_Games_missing_Something('BIC'); 我想显示不包含'B','I','C','BI','IC','BC','BIC'的completeness_type列所以,completenenss_type列中的记录必须是没有记录

那么,您能告诉我我犯了什么错误吗?我让这个查询适用于不只包含“B”、“I”或“C”的行。我只想要不单独包含“BI”或“B”或“I”的行的结果

提前致谢

最佳答案

我没有确切的答案,但似乎可能有更好的方法。有点不清楚您的值对应什么,但一种简单的方法是使用三列,BIC,它们可能是BIT 类型。您可能会成功存储它,类似于 Unix 权限的存储方式;例如,文件存储为 BIC,因此 B 类型的行将被编码为 100,IC 将读取 011。根据几个因素,这可能比各个列更好,但作为即兴答案根据您的查询的样子,我怀疑离散列会更容易编码。

然后,当然,要使用 BI 搜索行,您需要搜索列 WHERE `B`=1 AND `I`=1 AND `C`=0 等等其他搜索。与使用 ENUM 字段相比,这可以更好地扩展,并且是更好的数据库设计。

关于mysql - 如何识别和取消选择具有枚举数据类型的列的仅一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013879/

相关文章:

mysql - 查询显示每天的金额,仅包含 View

python - 用MySQL查询生成一维数组

javascript - 如何在 php 中单击按钮显示表格?

c# - 以枚举为键绑定(bind)到字典中的值

mysql - 使用 Join 更新 Coldfusion ORM

php - 如何使用此php代码从wamp数据库访问mysql表?

java - 返回枚举值而不调用 get 函数

c++ - Q_ENUM 中索引的值

swift - 你可以在枚举中使用闭包作为 Swift 中的参数吗?

c# - 为什么我不应该在标志枚举中使用 0