JSON_CONTAINS 替代方案

上周,我在一个拉取请求中使用了JSON_CONTAINS。但是,当我的同事在本地运行并审查代码时,代码却失败了,因为JSON_CONTAINS在MYSQL和MariaDB中用法不一样。而我运行的是 MariaDB 而不是 MYSQL。

WHERE 
	usermeta.meta_key = 'demo_key'
	AND JSON_CONTAINS(usermeta.meta_value, redirects.id);

这里的meta value是一个包含ID的数组,像这样保存到数据库中。

update_user_meta(
	$user_id,
	'demo_key',
	wp_json_encode( array_unique( $redirects ) )
);

我们来回讨论,试图找到一个在两个数据库中都能使用的解决方案,但未能如愿。

最后,我同事建议我们把meta value保存为逗号分隔的字符串,然后使用 FIND_IN_SET 来完成这项工作。

也许你已经知道答案了,它很好用。

WHERE 
	usermeta.meta_key = 'demo_key'
	AND FIND_IN_SET(
		redirects.id,
		CAST(usermeta.meta_value as CHAR)
	    ) > 0;

访客留言

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注