内连接选择语句

时间:2012-09-20 02:48:48

标签: php mysql select

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]; ?>

等...

3 个答案:

答案 0 :(得分: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并在过程完成后回显它。

答案 1 :(得分:0)

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

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']; ?>

等等。

我还在这里写了一篇你可能感兴趣的Q&amp; A长度:How can an SQL query return data from multiple tables

编辑:我看到其他两位回答的人告诉你重新设计你的桌子 - 我有点做,但有点不同意。

这张表格粗略地标准化,这意味着您可以添加一百个额外的表单字段,而不必触及表格本身 - 这是一个(令人惊讶的)好事。我想说这个设计让你更难以获得这些特定的数据,但它非常强大 - 如果不是非常快速或容易访问。

答案 2 :(得分: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知识有限,但我认为这样可行。如果没有,我知道它并不复杂)

更简单,更少的代码......最重要的是imho,更有效率。

我建议您阅读Database Normalization,以便更好地了解数据库的设计方式。但这并不需要它,只需要知道和理解的东西。