从一列分组页面

时间:2011-10-24 00:05:39

标签: php mysql sql regex group-by

我在我的数据库中的page table中有这些信息,

page_id     page_title

1           xy {a}
2           kp {a}
3           xyz {b}
4           mno {b}
5           abc {c}
6           mno {c}
7           qwe {c}

我使用花括号对页面进行分组,例如页面xykp属于a组。

所以我想在这个信息中返回结果,

group_title     page_title
a               xy
a               kp
b               xyz
b               mno
c               abc
c               mno

但每组中最多两页

我可以使用SQL查询来实现这个还是PHP?

这就是我使用REGEXP ...

所做的工作
SELECT 
p.page_title REGEXP '{[a-z]}' AS groupTitle

FROM pages AS p

ORDER BY p.page_created DESC

我得到了这个结果,

groupTitle
0
0
0
0
0
0

有什么想法吗?

修改

这是我的查询,

SELECT *

FROM(
    SELECT 

        p.page_id AS page_id,
        p.page_url AS page_url,
        SUBSTRING(p.page_title,LOCATE('{',p.page_title),LOCATE('}',p.page_title)) AS group_title,
        p.page_created AS page_created,
        @row_number := @row_number + 1 AS row_number

    FROM root_pages AS p

    WHERE p.parent_id = '8'
    AND p.page_id != '8'
    AND p.page_hide != '1'
    AND p.category_id = '1'

    ORDER BY p.page_backdate DESC


) a

其中row_number< = 2

结果,

page_id page_url    group_title page_created    row_number
44      abc         {a}         2011-10-21...   NULL
43      def         {a}         2011-10-21...   NULL
42      qwe         {b}         2011-10-21...   NULL
41      rty         {b}         2011-10-21...   NULL
40      tyu         {c}         2011-10-21...   NULL
39      ghj         {c}         2011-10-21...   NULL
59      sss         {c}         2011-10-21...   NULL

但我仍有问题限制每组的行数,任何想法?

1 个答案:

答案 0 :(得分:1)

在页面表中添加一个名为group_id(或类似名称)的列。

如果想要选择一个组,请从包含WHERE group_id =的数据库中选择,或者按组排序ORDER BY group_id进行选择。

修改

如果你必须坚持这个概念,你可以将page_title拆分成相关的组件。我不会向你展示一个有效的查询和排序例程,但是为了让你开始:

$page_title_separated = preg_split("/[\{\}]+/", $page_title);

其中$page_title是您的数据库中的页面标题。

按照您的示例(第1行条目),这将导致

$page_title_separated[0] => xy
$page_title_separated[1] => a

嗯,为了完整起见,我们要提到的是$page_title_separated[2],这将是空的。此外,真实标题,即$page_title_separated[0]将以空格结束。

我假设您知道如何在php中对数组进行排序以及稍后如何处理这些数据。

有很多方法可以做到这一点,但是 - 我不能强调这一点 - 最简单的仍然是第三列。