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

等...

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()で結果を返したかどうかを確認してから、スイッチ/ケースを使用して配列を反復処理し、使用するラベルを決定します。ケース2を8に追加するだけで、うまくいくはずです。

編集:別の方法は、変数を使用してHTMLを保存し、プロセスの完了後にエコーすることです。

于 2012-09-20T03:07:43.953 に答える
0

この厄介なコードでうまくいくはずです。group_concatを使用してnull以外の行を単一のフィールドにグループ化します。ユニオンは各行に対して1つの列のみがnullであることを意味するため、機能するはずです。

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クエリが複数のテーブルからデータを返す方法

編集:答えた他の2人があなたにあなたのテーブルを再設計するように言ったのを見ます-私はそうしますが、ある種は同意しません。

このテーブルは厳密に正規化されています。つまり、100個のフォームフィールドを追加でき、テーブル自体に触れる必要はありません。これは(驚くほど)良いことです。この設計により、この特定のデータを取得するのが難しくなっていると思いますが、驚くほど迅速または簡単にアクセスできるとは言えませんが、非常に堅牢です。

于 2012-09-20T03:17:54.997 に答える
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 に答える