2012-09-20 62 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