0

实际上,我已经创建了一个 CMS,我可以在其中插入带有关键字的帖子。我的意思是我在 mysql 数据库中使用一个表,其中有一个名为“关键字”的列。

我想使用逗号分隔的关键字创建类别,为此我必须一次获取一个单词如果特定帖子有很多单词,我想知道我必须使用的 sql 查询(或 PHP 代码)使用 PHP 来做到这一点。

例如:- 如果我有如下所示的表格,

Post_id post_title post_keywords

1 第一篇 PHP
2 秒后 PHP、jquery
3 第三篇 css, html
4 第四篇 html

我想根据关键字创建类别,如下所示:-

PHP -> 第一篇 Jquery -> 第二篇 CSS -> 第三篇
       第二个帖子             

html -> 第三篇文章
        第四帖

意味着我点击 php 然后它应该包含两个帖子“第一篇文章”和“第二篇文章”。

4

3 回答 3

3

您的帖子表:

CREATE TABLE posts
    (`id` int, `title` varchar(11))
;

INSERT INTO posts
    (`id`, `title`) 
VALUES
    (1, 'first post'),
    (2, 'second post'),
    (3, 'third post'),
    (4, 'fourth post')
;

您的标签表

CREATE TABLE tags
    (`id` int, `tag` varchar(6))
;

INSERT INTO tags
    (`id`, `tag`)
VALUES
    (1, 'PHP'),
    (2, 'jquery'),
    (3, 'css'),
    (4, 'html')
; 

还有你的连接表。

CREATE TABLE post2tags
    (`postid` int, `tagid` int)
;

INSERT INTO post2tags
    (`postid`, `tagid`)
VALUES
    (1, 1),
    (2, 1),
    (2, 2),
    (3, 3),
    (3, 4),
    (4, 4)
;

然后这个 SQL 基本上可以得到你想要的(也许顺序不同):

SELECT t.*, p.*
FROM tags t
INNER JOIN post2tags p2t ON t.id=p2t.tagid
INNER JOIN posts p ON p.id=p2t.postid
ORDER BY t.tag, p.title

这是在SQLFiddle

这是一个多对多的关系。一旦你理解了它,你可能会经常使用它。

于 2013-07-30T03:31:27.857 回答
0

我会做以下事情

表帖

PostId|PostName|...
     1|First Post|...
     2|Second Post|...
       ...

表关键字

keyID|KeyName
     1|PHP
     2|JQUERY
      ...

表 RE_Post_KEY(多对多)

PostID|KeyID
     1|1
     1|2
     2|1
     2|2
     ...
于 2013-07-30T03:20:37.703 回答
0

虽然我同意规范化数据库的建议,但要回答您的具体问题,您可以使用FIND_IN_SET()

SELECT Post_Title
FROM YourTable
WHERE FIND_IN_SET('php', post_keywords)

但是,如果您规范化您的数据库,您只需要使用一个简单的JOIN.

于 2013-07-30T03:23:22.247 回答