Php 我正在尝试从行中获取数据,以将其匹配到定义的列中

Php 我正在尝试从行中获取数据,以将其匹配到定义的列中,php,mysql,Php,Mysql,使用PHP/MySQL 我有两个表,一个是客户,另一个是客户数据 有一个字段与列表ID中的两个字段相匹配 现在,在cust_数据表中,数据被列为cust_数据 栏目: ListID DataName DataValue 1 type something 1 Region something 顾客 栏目: 我想得到的结果如下 Name Address City State Zip Phone Type Region 您可以使用组查询来完成此操作。您可

使用PHP/MySQL

我有两个表,一个是客户,另一个是客户数据

有一个字段与列表ID中的两个字段相匹配

现在,在cust_数据表中,数据被列为cust_数据

栏目:

ListID  DataName  DataValue
 1      type      something
 1      Region    something
顾客 栏目:

我想得到的结果如下

Name Address City State Zip Phone Type Region

您可以使用组查询来完成此操作。您可以按ListID分组以获得一行,这一点相对简单—只需根据需要有条件地选择并别名DataValue字段:

SELECT c.Name, c.Address, c.City, c.State, c.Zip, c.Phone,
    MAX (CASE WHEN d.DataName = 'type' THEN DataValue ELSE NULL END) AS  `Type`,
    MAX (CASE WHEN d.DataName = 'Region' THEN DataValue ELSE NULL END) AS  `Region`
FROM customers c, cust_data d
WHERE c.ListID = d.ListID
GROUP BY c.ListID, c.Name, c.Address, c.City, c.State, c.Zip, c.Phone

了解。我熟悉将在ListID列上加入的join命令,但我不知道如何确保该类型位于type下,该区域位于region下,因为数据位于行而不是列。[]标识符引号在MySQL中无效。改为使用反勾选。当使用group by时,它只会得到类型的结果,而不会得到区域的结果。@Steven我不知道为什么会这样。你是说它显示为空?请尝试我的更新答案,问题可能是我没有按所有非聚合列进行分组。这仍然不起作用,它将只返回我假设的第一个结果,因为在对它们进行分组时,它会忽略包含ListID的多行,而只取第一个。我将尝试按cust上的ListID进行分组_data@Steven这就是使用MAX的要点——它应该选择适当的DataValue并忽略Null值。很明显我错过了什么,不过。。。不确定是什么。您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解在第行的“在qb_customer.ListID=qb_dataext.Entity上以数据类型加入qb_dataext”附近使用的正确语法4@Steven:JOIN qb_dataext不在我上面的答案中。。请在某个地方发布您正在使用的完整查询。我修复了一个问题,当时不应该有,现在我遇到了一个新问题$res=mysql\u query选择CompanyName作为客户,BillAddress\u Addr2作为Street1,BillAddress\u State作为State,BillAddress\u PostalCode作为Zip,AccountNumber作为“Account No.”,CustomerType\u FullName作为“Customer Type”,SalesRep_FullName作为Rep,data_type.DataExtValue作为type,data_region.DataExtValue作为$table1上的区域加入$table2作为$table1.ListID=$table2.Entity_ListID和data_type.DataExtName='type'将$table2作为$table1.ListID上的数据_区域加入$table2.Entity_ListID和data_region.DataExtName='region';“on子句”中的未知列“qb_dataext.Entity_ListID”
SELECT customers.*, data_type.DataValue AS Type, data_region.DataValue AS Region
FROM   customers
  JOIN cust_data AS data_type ON (
         data_type.ListID   = customers.List_ID
     AND data_type.DataName = 'Type'
  )
  JOIN cust_data AS data_region ON (
         data_region.ListID   = customers.List_ID
     AND data_region.DataName = 'Region'
  )
SELECT c.Name, c.Address, c.City, c.State, c.Zip, c.Phone,
    MAX (CASE WHEN d.DataName = 'type' THEN DataValue ELSE NULL END) AS  `Type`,
    MAX (CASE WHEN d.DataName = 'Region' THEN DataValue ELSE NULL END) AS  `Region`
FROM customers c, cust_data d
WHERE c.ListID = d.ListID
GROUP BY c.ListID, c.Name, c.Address, c.City, c.State, c.Zip, c.Phone