Группировать страницы из одного столбца - PullRequest
0 голосов
/ 24 октября 2011

У меня есть эта информация в 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

Есть идеи?

EDIT:

Вот мой запрос,

ВЫБРАТЬ *

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 </p>

результат

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 Ответ

1 голос
/ 24 октября 2011

Добавьте столбец с именем group_id (или тому подобное) в таблицу страниц.

Выберите из БД с помощью WHERE group_id =, если хотите выбрать одну группу или ORDER BY group_id, ну, в общем, упорядочить по группам.

РЕДАКТИРОВАТЬ

Если вы должны придерживаться этой концепции, вы можете разделить заголовок страницы на соответствующие компоненты.Я не собираюсь представлять вам рабочий запрос и процедуру сортировки, но для начала:

$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 и что делать с этими данными позже.

Естьмножество простых способов сделать это, но - я не могу не подчеркнуть это - самым красивым остается третий столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...