0

不知道解决这个难题时要搜索什么。不问世界……只问方向,除非你觉得很慷慨。这将非常难以解释。

我的网站有带有测量值的下拉菜单。选择宽度 x 高度下拉列表时,它会检查数据库的价格。目前,宽度和高度在数据库中是特定的,例如 24、28、32、36。所以我只是将查询循环中的测量值拉到我的列表中……瞧,它匹配并回显价格……但是……

现在我发现列出的测量值需要以 1" 为增量。所以,我只有一个包含特定测量值的数据库,但我需要整个测量范围。

我真的必须进入数据库并手动输入 24 英寸、25 英寸、26 英寸、27 英寸......的相同价格以及 28 英寸、29 英寸、30 英寸、31 英寸......的相同价格吗?这次做几百种产品?

或者是否有一个 SQL 技巧允许我选择最小和最大测量值,在下拉列表中列出它们,然后匹配那些 1" 增量测量值之一,这与 DATABASE 所说的不完全一样......但介于两者之间(例如) 24" 和 28"。

希望这不会太令人困惑,谢谢。

多亏了 Gordon,这比预期的要容易得多。我把它弄得比它应该做的更复杂。

有效的代码:

SELECT * FROM price_dimensions WHERE prodid = '".$_POST['prodid']."' AND height >= '".$_POST['heightX']."' AND width >= '".$_POST['widthX']."' ORDER BY height ASC, width ASC LIMIT 1
4

2 回答 2

1

between只要您更改表结构,它确实与. 您的问题基本上是您有一个值,您需要找出它介于哪两个值之间。

反过来,这意味着您需要在数据库中存储两个值,最小值和最大值。以您的示例为例,您的表格可能如下所示:

+------------+-----------+------------+-------+
| 产品编号 | 最小值 | 最大值 | 价格 |
+------------+-----------+------------+-------+
| 1 | 24 | 27 | 75.13 |
| 1 | 28 | 31 | 83.55 |
+------------+-----------+------------+-------+

您需要对product_id, min_value. 您还需要确保每个相同的product_id存在max_value不少于等于任何。min_valueproductid

然后,您选择数据的查询将变为:

select price
  from my_table
 where product_id = :product_id
   and :value between min_value and max_value

顺便说一句,您之前可能不需要循环。如果可能,请始终在单个查询中执行某些操作。

于 2012-05-23T21:22:39.160 回答
1

我想你可以只插入你想要的行。这是一些伪代码:

insert into t
    select t.width+1, price
    from t

insert into t
    select t.width+2, price
    from t

insert into t
    select t.width+3, price
    from t

如果价格确实相同,您也许可以只查询最接近的值,小于或等于或大于或等于给定的宽度。

于 2012-05-23T20:31:00.870 回答