我有一个项目表,我从 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";
我没有改变任何其他事情。
答案 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的记录数。