避免重复php + mySQL查询的结果

时间:2014-05-21 17:42:33

标签: php mysqli

我有一个项目表,我从 price 列的10000下获取值

这是我最简单的查询方式:

$sql_range_price = "SELECT c.price FROM items WHERE c.price < 10000 AND c.item LIKE '$anyitem' ORDER BY c.price ASC";

$rs_range_price = mysqli_query($db_conx,$sql_range_price);

让我们说获取的列具有以下值:

4495
1995
1500
1399
995
890
798

这就是我在PHP中玩它们的方式:

while($row_range_price = mysqli_fetch_array($rs_range_price, MYSQLI_ASSOC)) {
  $rprices = $row_range_price["price"];
  switch (true) {
      case $rprices > 9000 && $rprices <= 10000:
          echo "Items between $9000 and $10000";
          break;
      case ($rprices > 8000 && $rprices <= 9000):
          echo "Items between $8000 and $9000";
          break;
      case ($rprices > 7000 && $rprices <= 8000):
          echo "Items between $7000 and $9000";
          break;
      case ($rprices > 6000 && $rprices <= 7000):
          echo "Items between $6000 and $7000";
          break;
      case ($rprices > 5000 && $rprices <= 6000):
          echo "Items between $5000 and $6000";
          break;
      case ($rprices > 4000 && $rprices <= 5000):
          echo "Items between $4000 and $5000";
          break;
      case ($rprices > 3000 && $rprices <= 4000):
          echo "Items between $3000 and $4000";
          break;
      case ($rprices > 2000 && $rprices <= 3000):
          echo "Items between $2000 and $3000";
          break;
      case ($rprices > 1000 && $rprices <= 2000):
          echo "Items between $1000 and $2000";
          break;
      case ($rprices > 0 && $rprices <= 1000):
          echo "Items between $0 and $1000";
          break;
      default:
      {
        echo "No items in price range.";
        break;
      }
    }

这将打印:

$ 0到$ 1000之间的物品
$ 0到$ 1000之间的物品
$ 0到$ 1000之间的物品
1000美元到2000美元之间的物品 1000美元到2000美元之间的物品 1000美元到2000美元之间的物品 4000美元到5000美元之间的物品

我想要打印的是:

$ 0到$ 1000之间的物品
1000美元到2000美元之间的物品 4000美元到5000美元之间的物品

我现在的问题是:

1)如何避免重复项目介于$ 0和$ 1000 之间。我应该使用SQL查询还是PHP部分?

2)使用 if 条件,它几乎需要相同数量的代码。使用开关可以吗?还是有更好或更有效的方式?

非常感谢您的帮助或建议。

P.S。我不是php或mySQL大师。只是这样说是因为上次我问了一些问题,我得到了人们的负面答案,假设我在询问之前应该知道关于这个主题的一切。

更新解决方案: 这是新的QUERY,现在感谢您的帮助:

SELECT 
  CASE 
    WHEN c.price > 0 AND c.price <= 1000 THEN '1000'
    WHEN c.price > 1000 AND c.price <= 2000 THEN '2000'
    WHEN c.price > 2000 AND c.price <= 3000 THEN '3000'
    WHEN c.price > 3000 AND c.price <= 4000 THEN '4000'
    WHEN c.price > 4000 AND c.price <= 5000 THEN '5000'
    WHEN c.price > 5000 AND c.price <= 6000 THEN '6000'
    WHEN c.price > 6000 AND c.price <= 7000 THEN '7000'
    WHEN c.price > 7000 AND c.price <= 8000 THEN '8000'
    WHEN c.price > 8000 AND c.price <= 9000 THEN '9000'
    WHEN c.price > 9000 AND c.price <= 10000 THEN '10000'
 END AS rprice
FROM mytable
WHERE c.price <= 10000 AND c.item LIKE '$item' GROUP BY rprice ASC";

我没有改变任何其他事情。

2 个答案:

答案 0 :(得分:1)

尝试在查询中使用SELECT DISTINCT价格

答案 1 :(得分:1)

如果您的价格区间不规则,您可以使用案例陈述:

SELECT DISTINCT 
 CASE 
 WHEN price <= 1000 THEN 1000 
 WHEN PRICE <= 5000 THEN 5000
 ELSE 999999
 END
 AS price_band
 ...

如果您的价格区段完全相同,您可以使用:

SELECT DISTINCT 
 TRUNCATE(1000 - 1, -3) + 1 AS price_from, 
 TRUNCATE(1000 - 1, -3) + 1000 AS price_to ...

作为使用SELECT DISTINCT来消除重复行的替代方法,您可以使用COUNT(*)和GROUP BY来获取每个波段中的项目数。

你可以在PHP中做类似的事情但是使用SQL语句给你带来减少必须传递给PHP的记录数。