1

各行の contract.id を条件とするように、provision_id 列の結果を返すにはどうすればよいですか? 現在、すべての行で同じ結果が得られます。望ましい効果は、Excel の VLookup のようなものです。ただし、if else/sql 値を使用して PHP でそれを実現する方法がわかりません。

関連コード:

<?php
global $wpdb;
$contents = $wpdb->get_results( $wpdb->prepare("SELECT id, name, remaining, contract_value FROM salaries"));
$contracts = $wpdb->get_results( $wpdb->prepare("SELECT contracts.id,source,provision,provision_id FROM contracts LEFT JOIN salaries ON contracts.id = salaries.id"));

 ?>

   [table header stuff...]

foreach ($contents as $content) {
    ?>   
         <tr>
                <td><?php echo $content->name ?></td>
                <td><?php echo $content->remaining ?></td>
                <td><?php echo $content->contract_value ?></td>
                <td><?php foreach ($contracts as $contract) { echo $contract->provision_id }; ?> 
               </td>

電流出力

Name               Remaining         Contract_Value    Provision_ID
--------------     ---------------   --------------    --------------
Adam               100               300               A1 B1 C1
Bill               200               400               A1 B1 C1
Chad               200               400               A1 B1 C1

望ましい出力

Name               Remaining         Contract_Value    Provision_ID
--------------     ---------------   --------------    --------------
Adam               100               300               A1
Bill               200               400               B1
Chad               200               400               C1

ここで、A1、B1、C1 はそれぞれ、列 1 の人の名前に対応する格納されたデータ セルを表します。ID を PHP の出力に表示したくありませんが、provision_id を名前ではなく Adam、Bill、および Chad の ID に基づいて条件付きにしようとしています。

基本的に、PHP で ID (別名メンバー ID) を「検索」し、対応する provision_id を出力する必要があります。A1、B1、C1などのマウスオーバー効果としてテーブルから「ツールチップ」もプルしているため、この場合、テーブルの結合はおそらく機能しません。

付録 1 - 別名、何が起こっているか。Adam Bill と Chad がそれぞれ複数のプロビジョニング ID を持っていることを (簡単にするために) 説明できませんでした。Adam にはプロビジョニング ID があります。たとえば、A1、A2、および A3 です。以下の問題を回避しようとしています(GROUP_CONCATは機能しますが、各規定にマウスオーバーのツールチップがあるため、機能するとは思いません)。

Name               Remaining         Contract_Value    Provision_ID
--------------     ---------------   --------------    --------------
Adam               100               300               A1
Adam               100               300               A2
Adam               100               300               A3
Bill               200               400               B1
Bill               200               400               B2
Chad               200               400               C1
4

2 に答える 2

1

次のクエリを試してください。その後、データベースへの 1 つの要求ですべてを実行できます。

SELECT salaries.id AS salaries_id, salaries.name, salaries.remaining, 
salaries.contract_value, contracts.provision_id AS provision_id 
FROM salaries LEFT JOIN contracts ON contracts.id=salaries.id
于 2009-07-20T18:28:42.753 に答える
0

私はまだ独学しているので、これについて専門家の助けを求めなければなりませんでした。彼は、2 つのテーブル間で 'id' が一致する行に対してのみ $contracts クエリが機能するようにする、条件付き省略形と呼ばれる手法を使用しました。

勝利のコード スニペット:

     foreach ($contracts as $contract)
                    {
                        echo ( $content->id == $contract->id ) ?
                             '<a href="' . $contract->source . '" tooltip="' . $contract->provision . '">' . $contract->provision_id . " " . '</a>' : '';
                     } 
                   ?>
                </td>

<?php };

彼は私に次のリンクを送ってくれました: http://www.bradino.com/php/ternary-operator-conditional/ http://travisballard.com/ で彼を見つけることができます。

乾杯!

于 2009-07-20T22:27:20.167 に答える