MySQL-使用 MAX 查询 GROUP_CONCAT 中的加密值

标签 mysql sql encryption

我在获取加密值时遇到错误 GROUP_CONCAT(DISTINCT CONCAT('MAX(IF) 标签,实际上我正在尝试获取表的枢轴值,我有两个包含数千行值的表,但为了简单起见,我在下面简要给出了一些 -

individual_data 表为,

-----------------------------------
|ID         |fieldname  |answertext|
-----------------------------------
|30101      |state      |0         |
-----------------------------------
|30101      |Number |4         |
-----------------------------------
|30101      |Name       |Rajbanshi |
-----------------------------------
|30101      |Main       |RAJBANSHI |
-----------------------------------
|30101      |Surname    |RAJBANSHI |
-----------------------------------
|30201      |state      |0         |
-----------------------------------
|30201      |Number     |4         |
-----------------------------------
|30201      |Name       |Pawar     |
-----------------------------------
|30201      |Main       |Ramesh    |
-----------------------------------
|30201      |Surname    |Pawar     |
-----------------------------------

*注意-在此表中,“aswertext”字段已加密,但为了清楚起见,我给出了实际值,并且我需要该值出现在输出中...

和 sms_household 表一样,

-------------------------
|HHID   |sampletype |urid|
-------------------------
|30100  |3          |3008|
-------------------------
|30200  |4          |3005|
-------------------------

并希望得到所需的结果,

------------------------------------------------------------------------------
|ID     |state  |Number |Name       |Main       |Surname    |sampletype |urid |
------------------------------------------------------------------------------
|30101  |0      |4      |Rajbanshi  |RAJBANSHI  |RAJBANSHI  |3          |3008 |
------------------------------------------------------------------------------
|30201  |0      |4      |Pawar      |Ramesh     |Pawar      |4          |3005 |
------------------------------------------------------------------------------

同样,我编写了如下查询,

SET @@group_concat_max_len = 3000;
SET @sql = NULL;
SELECT 
GROUP CONCAT (DISTINCT 
CONCAT(
'MAX(IF(I.fieldname = ''',
fieldname, 
''', convert(aes_decrypt(answertext,'xyz')USING utf8), NULL)) AS ',
fieldname
)
) INTO @sql
FROM individual_data;

SET @sql = CONCAT('SELECT I.ID, H.sampletype, H.urid', @sql,
'FROM individual_data I inner join sms_household H on H.hhid = concat'(left(I.ID,4),'0')' and H.hhid like '30%' and H.urid like '30%' GROUP BY I.prim_key');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;`

但我在 `convert(aes_decrypt(answertext,'basbas')USING utf8), NULL)) AS '.....

行中收到语法错误消息

我不明白这段代码有什么问题..!!

最佳答案

你的代码很难理解。至少,group_concat() 中有拼写错误,并且 'xyz' 周围的引用不足。

这些类型的语句很难构造。我喜欢使用带有 replace() 的方法,而不是带有 concat() 的方法。这样可以更清楚地看到最终表达式的结构。

所以,像这样:

set @exp = 'max(case when i.fieldname = ''@f''
                     then convert(aes_decrypt(@a, ''xyz'') USING utf8)
                end) as @f'

select group_concat(distinct replace(replace(@exp, '@f', fieldname
                                            ), '@a', answertext
                                    )
                   ) INTO @sql
FROM individual_data;

我不能 100% 确定这是否是您的意图,但这应该会让您走上一条更好的道路。

关于MySQL-使用 MAX 查询 GROUP_CONCAT 中的加密值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288161/

相关文章:

Java:将使用服务器公钥加密的随机对称 key 发送到该服务器是否安全?

使用私钥的Javascript RSA解密

mysql - 更新mysql中的任何字段时自动更新时间戳

mysql - mysql/mariadb(或 amazon aurora)中 Multi-Tenancy 方法的实际实现

php - 是否使用 WP_Query 从自定义表中获取结果进行分页 - Wordpress

php - 如何在 Laravel 中创建 hasManyThrough 关系?

php - 如何在一个表中查找不在其他表中的行

mysql - 为什么 MySQL 数据库中的电话号码被截断

mysql - SQL Insert from Select to same table but with a changed ID - MySQL

android - Android 应用加密的现状如何?