首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql按字段值限制行

问Mysql按字段值限制行
EN

Stack Overflow用户
提问于 2016-02-14 19:39:46
回答 1查看 172关注 0票数 0

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

代码语言:javascript
复制
 +----+---------------------+ 
 |  1 | Item 1              |
 +----+---------------------+
 |  2 | Item 2              |
 +----+---------------------+
 |  3 | Item 3              |
 +----+---------------------+
 |  4 | Item 4              |
 +----+---------------------+
            ....
 +----+---------------------+
 |  5 | Item 25             |
 +----+---------------------+

不是火箭科学。现在,我们添加了新的功能,以便我们可以(可选)分组项-我们真的创建了一个‘很多’相同的项目。我们决定在数据库中添加名为groupID的新列--对于任何组中没有包含的项,可以为number或NULL。在网页上,我们必须把它显示为一个元素,当你点击它时,它会展开。

代码语言:javascript
复制
+----+---------------------+ 
|  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个元素之外的所有元素都是愚蠢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-14 19:52:59

正如您所说的,一些组ids可以是空的,我认为我们应该修复它。

当null时,我们为组使用item id,并使用前缀来确保新的group_id是唯一的。

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

代码语言:javascript
复制
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

**更新**

删除

代码语言:javascript
复制
 WHERE
        items.group_id IS NOT NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35397179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档