php - 从 MYSQL 数据透视表中筛选记录

标签 php mysql sql phpmyadmin

我有这个查询,http://sqlfiddle.com/#!9/1a579/3

我使用动态查询构建了这个。需要知道如何从中过滤记录。我需要将此查询的结果视为一个表。让我们说 CustomUser 表。所以我需要像下面解释的那样查询这个表。

SET @Colvalues = NULL;
SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(f.fieldName = ''',
      f.fieldName, ''', COALESCE(v.fieldValue, f.defaultValue) , NULL)) AS ', '''', f.fieldName , '''')
  ) INTO @Colvalues
FROM customField AS f
INNER JOIN Customvalue AS v ON f.Id = v.customFieldId;


SET @sql = CONCAT('SELECT 
    u.*, v.relatedId, v.CreatedAt, ', @Colvalues , '
FROM customField AS f
INNER JOIN Customvalue AS v ON f.Id = v.customFieldId RIGHT JOIN User u on u.id = v.relatedId
GROUP BY   v.relatedId, v.CreatedAt;');

PREPARE stmt 
FROM @sql;

EXECUTE stmt;

此结果具有以下数据, <code>enter image description here</code>

现在将其视为 CustomUser 表,我需要运行类似

的查询
select * from CustomUser where HOMEEMAIL like '%ab%' and JOINDATE like '%2010%' and SCHOOLING? like '%1%'

select * from CustomUser where HOMEEMAIL like '%ab%' and JOINDATE like '%2010%' and SCHOOLING? like '%1%' and LANDPHONENO? like '%0112%'

最佳答案

您可以用子查询包装它并进行任何您需要的过滤:

SET @Colvalues = NULL;
SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(f.fieldName = ''',
      f.fieldName, ''', COALESCE(v.fieldValue, f.defaultValue) , NULL)) AS ', '''', f.fieldName , '''')
  ) INTO @Colvalues
FROM customField AS f
INNER JOIN Customvalue AS v ON f.Id = v.customFieldId;


SET @sql = CONCAT('SELECT * FROM (SELECT 
    u.*, v.relatedId, v.CreatedAt, ', @Colvalues , '
FROM customField AS f
INNER JOIN Customvalue AS v ON f.Id = v.customFieldId RIGHT JOIN User u on u.id = v.relatedId
GROUP BY   v.relatedId, v.CreatedAt)
AS s WHERE s.Homeemail = 456;');   -- here

PREPARE stmt 
FROM @sql;

EXECUTE stmt;

SqlFiddleDemo

您还可以将条件提取到第二个变量并连接起来:

SET @conditions = NULL;
SET @conditions = CASE WHEN @conditions IS NULL THEN '1 = 1' ELSE @conditions END

SET @sql = CONCAT('SELECT * FROM (SELECT 
        u.*, v.relatedId, v.CreatedAt, ', @Colvalues , '
    FROM customField AS f
    INNER JOIN Customvalue AS v ON f.Id = v.customFieldId RIGHT JOIN User u on u.id = v.relatedId
    GROUP BY   v.relatedId, v.CreatedAt)
    AS s WHERE ',  @conditions);   -- here

关于php - 从 MYSQL 数据透视表中筛选记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668798/

相关文章:

php - WordPress MySQL - 查询未读取值 = '0'

mysql - sqoop 导入查询给出重复名称错误

php - 如何使用php删除目录中的图像文件同时添加新图像文件?

sql - oracle中如何从另一个表中获取一个表的id数

php - 来自主机名 "localhost"而不是容器名称的 php 容器的数据库连接

php - 通过php在xml文件中添加节点

php - 从 HTML 表中的存储过程 MySql PHP 获取结果

sql - 从 CSV 文件批量插入到远程服务器中的表

sql - 如何从自由文本 varchar 值中提取值作为 SQL 中的单独记录

javascript - 如何在我的 php mysql 中实现 Livestamp.js + Moment.js