我在我的数据库中的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}
我使用花括号对页面进行分组,例如页面xy
和kp
属于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
但我仍有问题限制每组的行数,任何想法?
答案 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中对数组进行排序以及稍后如何处理这些数据。
有很多方法可以做到这一点,但是 - 我不能强调这一点 - 最简单的仍然是第三列。