gpt4 book ai didi

php - Mysql 按字段值限制行数

转载 作者:行者123 更新时间:2023-11-29 21:28:24 24 4
gpt4 key购买 nike

我正在使用 PHP 和 MySQL 开发简单的应用程序。到目前为止,我们需要在 HTML 表格中显示数据库中的项目。还实现了简单的分页。它看起来像这样:

 +----+---------------------+ 
| 1 | Item 1 |
+----+---------------------+
| 2 | Item 2 |
+----+---------------------+
| 3 | Item 3 |
+----+---------------------+
| 4 | Item 4 |
+----+---------------------+
....
+----+---------------------+
| 5 | Item 25 |
+----+---------------------+

不是火箭科学。现在我们添加了新功能,以便我们可以(可选)对项目进行分组 - 我们确实创建了“很多”相同的项目。我们决定在数据库中添加名为 groupID 的新列 - 对于不包含在任何组中的项目,该列可以是数字或 NULL。在网页上,我们必须将其显示为一个元素,当您单击它时该元素会展开。

+----+---------------------+ 
| 1 | Item 1 |
+----+---------------------+
| 2 | Item 2 |
+----+---------------------+
| 3 | Item 3 |
+----+---------------------+
| 4 | Group 1 (Expanded) |
+----+---------------------+
| Group 1 Item 1 |
+---------------------+
| Group 1 Item 2 |
+---------------------+
| Group 1 Item 3 |
+----+---------------------+
....
+----+---------------------+
| 25| Item 25 |
+----+---------------------+

正如您所看到的,一页上的项目数可能会有所不同,因此我们必须将组中的项目视为一项,因此简单的“限制 25”不再起作用。我想知道我是否可以做一些聪明的 mysql 查询来以这种方式工作。我宁愿避免在数据库中创建包含组和与项目表的关系的新表,因为大多数组只有 1 个项目。我不相信这个功能会被大量使用,但是你知道 - 客户端。此外,该系统在生产环境中运行了一段时间,因此我宁愿避免此类更改。知道如何让它发挥作用吗?另外请尽可能保持简单,因为这个例子已经被简化了。真正的查询已经有点复杂了。

我还希望避免通过 PHP 代码解析它,因为查询所有几千行然后丢弃除 25-50 个元素之外的所有元素是愚蠢的。

最佳答案

正如您所说,某些组 ID 可能为空,我认为我们应该解决这个问题。

null时,我们使用组的项目ID,并使用前缀来确保新的group_id是唯一的。

这是我使用子查询的解决方案(不太漂亮,但似乎有效):

SELECT 
i1.id,
i1.itemgroup1
FROM (
SELECT
items.id,
IF(ISNULL(items.group_id),
CONCAT('alone-', items.id),
CONCAT('group-', items.group_id)) as itemgroup1
FROM
items
) as i1
RIGHT JOIN (
SELECT
items.id,
IF(ISNULL(items.group_id),
CONCAT('alone-', items.id),
CONCAT('group-', items.group_id)) as itemgroup2
FROM
items
GROUP BY itemgroup2
LIMIT 2
) as i2 on i2.itemgroup2 = i1.itemgroup1

** 更新 **

已删除

 WHERE
items.group_id IS NOT NULL

关于php - Mysql 按字段值限制行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35397179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com