作为一个引导程序,我想说我是一个PHP程序员 - 并且没有比该角色更需要的SQL。
我继承了一个带有遗留结构的表,该结构使用CHAR(1),其值为'Y'或空白(即'')以表示真和假。
我宁愿将列类型设为TINYINT,1表示true,0表示false。 (布尔 - 我想要布尔。)我想部分原因是因为PHP使得转换1和0变为真和假更容易。 'Y'v。''需要更多的逻辑而不是我满意,最终有人会忘记他们实际上并不是布尔并造成混乱。
到目前为止,这是我的方法:
这些列在任何地方充当外键,我完全与其他系统隔离,所以不用担心。我的问题有两方面:
首先,这是最好的方法吗?在我看来,可能有更好的方法来做到这一点。是否可以更改当前列中的值,然后更改其类型而不会丢失我的数据?
其次,如果我在正确的轨道上,如何将此SELECT IF(strcmp(hardware.USER_HARDWARE_REQUEST, 'Y'), 0, 1) FROM hardware;
转换为更新以将该值存储在另一列中?
答案 0 :(得分:1)
您也可以使用CASE
:
SELECT
CASE hardware.USER_HARDWARE_REQUEST WHEN 'Y' THEN 0 ELSE 1 END as 'result'
FROM hardware;
答案 1 :(得分:0)
好吧,我想我已经明白了。我可以继续更新Y /''值为1/0,然后只需更改类型。
查询我最终使用的内容类似于此UPDATE hardware SET SERVER_HARDWARE_REQUEST = (SELECT IF(strcmp(hardware.SERVER_HARDWARE_REQUEST, 'Y'), 0, 1));
然后我可以简单地更改列的类型定义,它就像魔法一样。