首页 > 解决方案 > MYSQL如何比较两个表的价格并显示所有结果

问题描述

我有两个表 feed_new 和 feed_old,它们都有 id、name、price。当用户进行价格检查时,将能够查看包含产品的整个列表,然后查看它们之间的不同(价格变化、产品删除/缺失、库存变化)

我进行查询以提取旧提要和新提要之间的差异,但我需要在一个查询中显示和其余记录不仅不同,该怎么做?

$query = $this->db->query("SELECT fo.id, fo.name,fo.price,fo.product_code, fo.stock, fn.id AS id_new, fn.name AS name_new, fn.price AS price_new, fn.product_code AS product_code_new, fn.stock AS stock_new 
FROM feed_old fo 
LEFT JOIN feed_new fn ON (fn.product_code = fo.product_code) 
WHERE fo.price <> fn.price OR fn.product_code IS NULL ");

这将导致:

id      name       price    product_code    stock   id_new  name_new    price_new   product_code_new    stock_new   
4659    Product     481     9997454          29     NULL       NULL     NULL        NULL                 NULL
4665    Product1    326     9997460          0      4665    Product1    3260        9997460              0
4666    Product2    324     9997461          2      4666    Product2    3240        9997461              2
4644    Product3    217     9998929          42     NULL       NULL     NULL        NULL                 NULL

然后我可以像这样循环结果

<table class="table">
<?php foreach ($query as $product): ?>
  <tr>
    <td> <?php echo $product['name'] ?> </td>
    <td> 
      <?php echo $product['price'] ?> 
      <?php if ($product['price_new'] != ''): ?>
          <?php if $product['price'] <> $product['price_new']): ?>
            <?php echo "New price" ?>
          <?php endif; ?>
        <?php elseif($product['price_new'] == '') ?>
        <?php echo "Product deleted" ?>
      <?php endif; ?>
    </td>
  </tr>
<?php endforeach; ?>
</table>

标签: phpmysqlselect

解决方案


如果我理解正确,则无需在查询中使用 fo.price <> fn.price 条件

$query = $this->db->query("SELECT fo.id, fo.name,fo.price,fo.product_code, fo.stock, 
fn.id AS id_new, fn.name AS name_new, fn.price AS price_new, fn.product_code AS 
product_code_new, fn.stock AS stock_new 
FROM feed_old fo 
LEFT JOIN feed_new fn ON (fn.product_code = fo.product_code) 

此查询将获取每个带有(或不带有)相关新 Feed 的旧 Feed


推荐阅读