4

SQL 语句

$CustInfo = Select * from wp_wpsc_submited_form_data where log_id = '6';

结果如下:

ID    CUST_ID    FORM_ID    VALUE

81       6          2       John
82       6          3       Smith
83       6          4       123 Main Street
84       6          5       Houston
96       6          6       NULL
85       6          7       US
86       6          8       77459

几个小时以来,我一直在为 Stack Overflow 上的所有示例挠头,但看不到任何足够接近的可以理解的东西。我希望有人可以简单明了地解释,并可能提供一个示例,说明如何使用这些值生成 HTML 表格。

例子:

Firstname :   <%php echo $CustInfo[2]; ?>
Lastname :    <%php echo $CustInfo[3]; ?>
Address :    <%php echo $CustInfo[4]; ?>

ETC...

4

3 回答 3

2

像这样的东西怎么样:(未经测试)

if(is_array($CustInfo) && count($CustInfo) > 0)
{
  echo "<table>";
  for($i=0;$i<count($CustInfo);$i++)
  {
     echo "<tr>";
     switch($i)
     {
       case 1: echo "<td>FirstName:</td><td>".$CustInfo[i]."</td>";
       ...
     }
     echo "</tr>";
  }
  echo "</table>";
}

我检查查询是否返回了 is_array 和 count() 的结果,然后使用 switch/case 遍历数组以确定要使用的标签。只需将案例 2 添加到 8,这应该可以解决问题。

编辑:另一种方法是使用变量来存储 HTML 并在过程完成后回显它。

于 2012-09-20T03:07:43.953 回答
0

问题是数据库设计,而不是 PHP 或 SQL。

您的表格应如下所示:

| CUST_ID (PK) |  FIRSTNAME | LASTNAME | STREETADDRESS   | CITY    | STATE | ZIPCODE |
 ------------------------------------------------------------------------------------
| 6            | John       | Smith    | 123 Main Street | Houston | NULL  | 77459   |
| 7            | Jane       | Doe      | 456 Fake St.    | Richmond| VA    | 23860   |

从这里,您可以通过简单地使用 SQL 语句来调用它们:

SELECT *
FROM UserTable
WHERE CUST_ID = 6

这将为您返回一个简单的答案,您可以像这样使用它:

FirstName: <%php echo $CustInfo['FIRSTNAME']; ?>

(免责声明:我的 PHP 知识有限,但我认为这会奏效。如果没有,我知道它并不复杂)

简单得多,代码少得多......最重要的是恕我直言,效率更高。

我确实建议您阅读数据库规范化,以便更好地了解应该如何设计数据库。但这不是必需的,只是一些很好的了解和理解。

于 2012-09-20T03:33:07.370 回答
0

这个讨厌的代码应该可以解决问题,它使用 group_concat 将非空行分组到单个字段中,因为联合意味着每行只有一列为空,它应该可以工作:

select 
    group_concat(Firstname) as FirstName,
    group_concat(Surname) as Surname,
    group_concat(Add1) as Add1,
    group_concat(Add2) as Add2,
    group_concat(Add3) as Add3,
    group_concat(Country) as Country,
    group_concat(ZipCode) as ZipCode
from
(
    select
        value as FirstName,
        null as Surname,
        null as Add1,
        null as Add2,
        null as Add3,
        null as Country,
        null as ZipCode
    from 
        wp_wpsc_submited_form_data 
    where 
        log_id = '6' // I can't actually see this field in your columns??
        and form_id=2
    union
    select
        null as FirstName,
        Value as Surname,
        null as Add1,
        null as Add2,
        null as Add3,
        null as Country,
        null as ZipCode
    from 
        wp_wpsc_submited_form_data 
    where 
        log_id = '6'
        and form_id=3
    union
    ...
    ...
    ...
    union
    select
        null as FirstName,
        null as Surname,
        null as Add1,
        null as Add2,
        null as Add3,
        null as Country,
        Value as ZipCode
    from 
        wp_wpsc_submited_form_data 
    where 
        log_id = '6'
        and form_id=8
)

然后您应该能够很好地遍历行并执行以下操作:

Firstname :   <%php echo $CustInfo['FirstName']; ?>

等等。

我还在这里写了一篇您可能感兴趣的长度问答:SQL 查询如何从多个表中返回数据

编辑:我看到另外两个回答的人告诉你重新设计你的桌子——我有点这样做,但有点不同意。

该表格经过严格规范化,这意味着您可以添加一百个额外的表单字段而不必触摸表格本身 - 这是一件(令人惊讶的)好事。我会说这种设计让您更难获取这些特定数据,但它非常强大 - 如果不是非常快速或易于访问的话。

于 2012-09-20T03:17:54.997 回答