我正在使用PHP和MySQL开发简单的应用程序。到目前为止,我们需要在HTML表中显示数据库中的项。还实现了简单的分页。看起来是这样的:
+----+---------------------+
| 1 | Item 1 |
+----+---------------------+
| 2 | Item 2 |
+----+---------------------+
| 3 | Item 3 |
+----+---------------------+
| 4 | Item 4 |
+----+---------------------+
....
+----+---------------------+
| 5 | Item 25 |
+----+---------------------+不是火箭科学。现在,我们添加了新的功能,以便我们可以(可选)分组项-我们真的创建了一个‘很多’相同的项目。我们决定在数据库中添加名为groupID的新列--对于任何组中没有包含的项,可以为number或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查询,这样才能工作。我更希望避免在数据库中创建包含组和与项表的关系的新表,因为大多数组只有一个项。我不相信这个功能会被大量使用,但是你知道-客户端。而且,这个系统在生产上工作了一段时间,所以我宁愿避免这样的更改。知道怎么让它工作吗?此外,请保持它尽可能简单,因为这个例子是简化的。真正的查询已经有点复杂了。
我还想避免通过PHP代码解析它,因为查询所有几千行,然后丢弃除25-50个元素之外的所有元素都是愚蠢的。
发布于 2016-02-14 19:52:59
正如您所说的,一些组ids可以是空的,我认为我们应该修复它。
当null时,我们为组使用item 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 NULLhttps://stackoverflow.com/questions/35397179
复制相似问题