簡體   English   中英

內部聯接選擇語句

[英]Inner join select statement

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

等等...

這樣的事情怎么樣:(未經測試)

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,並在過程完成后回顯它。

這個討厭的代碼應該可以解決這個問題,它使用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&A,您可能對此感興趣: SQL查詢如何從多個表返回數據

編輯:我看到回答的其他兩個人告訴您重新設計桌子-我有點這樣做,但有點不同意。

該表經過嚴格的規范化處理 ,這意味着您可以添加一百個額外的表單字段,而不必觸摸表本身-這是一件(令人驚奇的)好事。 我要說的是,這種設計使您很難獲得這些特殊的數據,但是它非常健壯-如果不是那么快或容易訪問的話。

問題是數據庫設計,而不是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的知識有限,但是我認為這可以工作。如果沒有,我知道它並沒有那么復雜)

更簡單,更少代碼...而且最重要的是恕我直言,更有效。

我確實建議您閱讀有關數據庫規范化的內容,以更好地了解應如何設計數據庫。 但這並不需要,只是一些很好的了解和理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM