【发布时间】:2021-10-30 00:02:40
【问题描述】:
我已经在 Stack 上工作多年,但这是我第一次发帖。我正在开发一个网站(php + mysql),下面的问题让我非常抓狂。
我有一个包含 2 列的表格:大小和数量。该表是由一个基本的 php 脚本生成的,它只是将存储在数据库中的值作为表中的行输出。超级基本,没有花哨的东西:
SELECT Size, Amount FROM database WHERE product = 'product123' ORDER BY Size ASC
php echo 输出一个显示大小和相应可用包(数量)的 html 表。
Echo '<td>'.$record['size'].'</td><td>'.$record['amount'].'</td>'
某些尺码有不同的数量,因此特定尺码可能会出现多次。示例:
Size | Amount
1 | 10
1 | 50
2 | 10
2+ | 10
3 | 40
3+ | 25
3+ | 40
4+ | 25
我想要实现的是包含相同尺寸的行具有相同的背景颜色。所以它应该交替,按尺寸分组,不幸的是这是不规则的。示例:
Size | Amount
1 | 10 < yellow
1 | 50 < yellow
2 | 10 < transparent
2+ | 10 < yellow
3 | 40 < transparent
3+ | 25 < yellow
3+ | 40 < yellow
4+ | 25 < transparent
因此,如果下一个 Size 与前一个不同,则行背景颜色应该改变。这样,单个尺寸作为一个组交替突出显示。请注意,尺寸 2 和 2+(3 和 3+ 相同)被认为是不同的尺寸,因此背景颜色应该改变。
我不知道如何用 php 实现这一点。困难在于我不能使用基于奇数/偶数的评估,因为有时会涉及“+”,并不是所有的 Sizes 数值。 不幸的是,更改命名方案以摆脱那个“+”不是一种选择。
我正在考虑以某种方式进行 php 检查,同时逐行生成表格,如果下一个输出的大小与前一个相同。如果是:背景颜色没有变化。如果否:更改背景颜色。但是我不知道最好的方法是编写这样的代码。任何指向正确方向的指针都非常感谢。
【问题讨论】:
-
所以 size 是 varchar 吗?是什么决定了实际颜色是什么?
-
你几乎可以按照你所说的去做,如果它们按大小排序,你只需检查以前是否与当前相同,如果是,则颜色相同。如果没有,那就换新颜色。您还可以使用循环根据
key的大小对返回的结果进行分组排序,然后在这些组中再循环一次。也许会内爆以节省更多循环。 -
是的,它是一个 varchar。我忘了提那个。实际颜色仅由大小的变化驱动。因此,当表中的下一个 Size 与前一个 Size 不同时,应该会发生行颜色更改。
-
如果你愿意,我只能在mysql中做,否则使用下面的php解决方案
-
我还不确定最好的路线是什么。您将如何仅使用 mqsql 实现这一目标?