2012-09-20 61 views
4

SQL语句内连接SELECT语句

$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 

我一直在抓我的头在这里对堆栈溢出所有的例子了几个小时,但可看不到任何可以理解的足够接近的东西。我希望有人可以清楚简单地解释,并可以提供一个例子,说明如何使用这些值生成HTML表格。

例如:

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

等等

回答

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()然后通过使用开关/外壳来遍历数组来确定要使用的标签。只要添加案例2到8,这应该做的伎俩。

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

+0

试过这个......但是它会生成一个空白屏幕......但是如果我做了回显选择,它会显示有数据 – user1684647

+0

@ user1684647此示例需要$ CustInfo作为SQL结果的返回数组查询,而不是查询的文本。 –

+0

对不起我的无知..我正在学习这个,因为我走过的例子,并不意味着成为一个负担..你能解释你的意思吗?“示例要求$ CustInfo是从您的SQL查询的结果返回的数组,而不是查询的文本“我想你想说的是$ CustInfo是执行查询的输出...而不是”Select * From .... where ... X = ''“...请确认 – user1684647

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

等。

我也写了一个长度Q &一个你可能在这里有兴趣:How can an SQL query return data from multiple tables

编辑:我看到其他两个人谁回答告诉您重新设计表格 - 这我有点事,但排序的不同意。

该表格已经过严格规范化,这意味着您可以添加一百个额外的表单字段,而不必触摸表格本身 - 这是一件(惊人的)好东西。我会说这个设计让你更难获得这些细节数据,但它非常强大 - 如果不是非常快或容易访问。

+0

试过这个...在网页上它是空白的..没有错误..所以我决定直接在mysql上运行这个查询,结果是[Err] 1248 - 每个派生表都必须有自己的别名......不知道这意味着什么......我试图查找它,并且如错误所示,派生表没有别名...唯一的别名这个方法(我不是专家)是,如果我有额外的动态字段,那么我不得不记得再次触摸这个文件..比较数组方法和循环数组结果... – user1684647

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以更好地了解数据库应如何设计。但这不是必需的,只是一些很好的知识和理解。

+0

不幸的是, m修改已购买的预先存在的脚本,这是我需要与其他站点集成以传输数据... 我希望它会像这样简单...您的代码的最终结果是真正的我正在寻找..能够使用一个变量,并将其放置在脚本所需的任何地方......但谢谢建议 – user1684647

+0

这很糟糕。直接用代码解析信息可能是最简单的,而不是SQL。就个人而言,我只是做一堆小的选择陈述来获得我需要的每个领域的信息。可怕的解决方案,但它会很快并且容易实现。对不起,我忍不住。 – mawburn