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

时间:2015-12-01 06:22:07

标签: mysql enums

我创建了一个过程,其中我的列值为enum datatype asCompleteness_Type`ENUM(' B',' I',' C',& #39; BC',' BI',' IC',' BIC')

我写了一个程序,我希望显示所有没有' I'在completeness_type列中。以下是我写的程序

    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'); 我想显示completeness_type列,其中不包含' I'因此,completeenss_type列中的记录必须是' B' C',' BC'

第二个电话: 预期输出:调用Get_Info_By_Games_missing_Something(' BI'); 我想显示completeness_type列,其中不包含' B','我' ,' IC' IC'' BC',' BIC'因此,completenenss_type列中的记录必须是' C'

对于第三次通话:致电Get_Info_By_Games_missing_Something(' BIC'); 我想显示completeness_type列,其中不包含' B','我' C',' BI',' ; IC',' BC',' BIC'因此,completenenss_type列中的记录必须是无记录

那么,请问你能说出我犯的错误。我得到的查询适用于不包含' B',' I'或者' C'。我只想要不包含' BI'的行的结果。或者' B'或者'我'单独

提前致谢

1 个答案:

答案 0 :(得分:0)

我对你的确切问题没有答案,但似乎可能有更好的方法。它有点不清楚您的值对应的是什么,但一个简单的方法是有三列,BIC可能是BIT类型。您可能成功存储它类似于Unix权限的存储方式;这样一个文件存储为BIC,因此B行将被编码为100,IC将读为011.根据几个因素,这可能比单个列更好,但作为一个袖手旁观的答案根据您的查询结果,我怀疑离散列将更容易编码。

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