PHP VLookup(条件匹配)替代?

时间:2009-07-20 16:36:33

标签: php mysql conditional

如何返回provision_id列的结果,以便它们以每行的contracts.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各自表示与column1中人员姓名对应的存储数据单元格。我试图根据Adam,Bill和Chad的ID而不是名字来使provision_id有条件,尽管我不希望在php输出中显示ID。

基本上,我希望PHP“查找”ID(也称为成员ID)并打印相应的provision_id。在这种情况下,连接表可能不起作用,因为我还从表中提取“工具提示”作为对A1,B1,C1等的鼠标悬停效果。

附录1 - 又称发生了什么。我没有解释(我试图保持简单)亚当比尔和查德各有一个以上的供应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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

因为我还在自学,所以不得不为此寻求专业帮助。他使用了一种名为条件速记的技术,这使得$ contracts查询只能用于两个表之间匹配'id'的行。

获奖代码段:

     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/找到他。

干杯!