在我的数据库设计中,我倾向于存储一些作为角色或类型充当SMALLINT的变量。
例如:
CREATE TABLE `house` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` smallint(11) NOT NULL,在PHP中,我需要:
define('HOUSE_SMALL_TYPE', '0');
define('HOUSE_MEDIUM_TYPE', '1');因此,在PHP中,在SELECT查询中,我会这样做:
$this->db->query("SELECT * FROM house
WHERE type = ?;", HOUSE_SMALL_TYPE);
我的问题是:
我也想做一些
SELECT * FROM house WHERE type = HOUSE_SMALL_TYPE;在MySQL查询中。
我的目的是,当我在MySQL中进行选择时,我不可能继续映射值0、1、2及其真正的含义。只需方便地查看表值,而不更改结构表和字段。
发布于 2013-03-13 11:39:10
我建议使用MySQL变量:
SET HOUSE_SMALL_TYPE = 0;
SET HOUSE_MEDIUM_TYPE = 1;然后,在查询中可以使用以下变量:
SELECT * FROM house WHERE type = @HOUSE_SMALL_TYPE;此方法定义会话变量:
如果更改会话系统变量,则该值将一直有效,直到会话结束或将该变量更改为不同的值为止。此更改对其他客户端不可见。
如果要定义全局MySQL变量(所有会话都可用):
SET GLOBAL HOUSE_SMALL_TYPE = 0;
SET GLOBAL HOUSE_MEDIUM_TYPE = 1;若要显式表示变量是全局变量,请在其名称前面加上全局变量或@@ global。设置全局变量需要超级特权。
文档:
发布于 2015-05-12 11:43:37
由于MySQL 5.5不可能设置全局用户定义的变量。
解决方法可能是创建一个返回所需内容的存储过程。
DROP PROCEDURE IF EXISTS HOUSE_SMALL_TYPE;
DELIMITER //
CREATE PROCEDURE HOUSE_SMALL_TYPE ()
BEGIN
SELECT 0;
END//
DELIMITER ;然后叫它。
CALL HOUSE_SMALL_TYPE();为了能够修改它,DROP语句是必需的。
发布于 2015-05-21 12:48:48
国际水文学组织,MySQL在这方面有一个巨大的差距,显然在后一个版本。一种选择可能是通过设置OS环境变量,但是如何从MySQL内部检索这些值,我一直无法看到。
这里有一整页:https://dev.mysql.com/doc/refman/5.0/en/setting-environment-variables.html教我们如何在shell中“设置”OS环境变量,但在MySQL中却没有一个真正调用这些变量的词。
作为另一种解决办法,使用函数可能比存储过程更轻量级,如下所示:
CREATE DEFINER=`root`@`localhost` FUNCTION `DEFAULT_COUNTRY_CODE`() RETURNS CHAR(4)
DETERMINISTIC
RETURN '+234';在查询的其他地方,您可以这样做:
SELECT CONCAT(DEFAULT_COUNTRY_CODE(), "-", telephone) FROM contacts WHERE CountryCode = "NGA"https://stackoverflow.com/questions/15381382
复制相似问题