Ситуация
В настоящее время я работаю над системой блогов и пытаюсь получить все сообщения с категориями, сделанные определенным пользователем.
Только запроспоказывает первый пост в базе данных, не более, сколько постов у пользователя.Кроме того, сгенерированный вывод категории является неправильным.
База данных
Вот SQL-команды для создания трех обязательных таблиц.
Post
create table Post(
headline varchar(100),
date datetime,
content text,
author int unsigned,
public tinyint,
type int,
ID serial,
Primary Key (ID),
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
author
- это идентификатор пользователя, создавшего публикацию, public
определяет, можно ли прочитать сообщение от всех, или является черновиком, а type
определяет, является ли запись в блоге (0
) иличто-то еще.
Категория
create table Kategorie(
name varchar(30),
short varchar(200),
ID serial,
Primary Key (name)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Post_Kategorie
create table Post_Kategorie(
post_ID bigint unsigned,
kategorie_ID bigint unsigned,
Primary Key (post_ID, kategorie_ID),
Foreign Key (post_ID) references Post(ID),
Foreign Key (kategorie_ID) references Kategorie(ID)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Запрос
Это запрос, который у меня есть в настоящее время, но, как упоминалось выше,это не работает так, как я хочу.
SELECT Post.headline, Post.date,
CONCAT(
"[", GROUP_CONCAT('{"name":"',Kategorie.name,'","id":',Kategorie.ID,'}'), "]"
) as "categorys"
FROM Post, Kategorie, Post_Kategorie
WHERE Post.author = 1
AND(
Post.public = 1
AND Post.type = 0
)AND(
Post_Kategorie.post_ID = Post.ID
AND Post_Kategorie.kategorie_ID = Kategorie.ID
)
Так как один пост может иметь несколько категорий, запрос генерирует JSON, который затем декодируется в объект в PHP.Это был простой способ архивировать это, подумал.
Что мне здесь не хватает?