【问题标题】:How to fetch one word at a time from mysql database using php如何使用php一次从mysql数据库中获取一个单词
【发布时间】:2013-07-30 01:08:30
【问题描述】:

实际上,我已经创建了一个 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 然后它应该包含两个帖子“第一篇文章”和“第二篇文章”。

【问题讨论】:

  • 如果正确规范化数据库,就不会出现这个问题。使用post_keywords 表,其中为分配给帖子的每个关键字保留一行,然后加入它们。
  • 我有一个用户界面,我可以在其中输入关键字以及帖子详细信息。我想在后台做我上面讨论的所有事情。我对上面没有太多想法,你能给我一些教程的链接吗?
  • google“数据库规范化教程”,你会发现很多。我从来没有读过它们,所以我不能推荐任何具体的东西。

标签: php mysql database


【解决方案1】:

您的帖子表:

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

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

【讨论】:

    【解决方案2】:

    我会做以下事情

    表帖

    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
         ...
    

    【讨论】:

    • 理论上我明白了,但实际没有实现,所以有点迷茫。
    【解决方案3】:

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

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

    但是,如果您对数据库进行规范化,则只需使用简单的JOIN

    【讨论】:

    • 我打开了您的链接并在 FIND_IN_SET () 中将 PHP 更改为 html,它只给出了一个结果,但它应该有两个。
    • @CDnDT -- 您应该规范化您的数据库以获得最佳性能。但是,由于您在列表之间存储空格,您可以使用 REPLACE 删除空格。这是另一个小提琴:sqlfiddle.com/#!2/1cdcf/4。话虽如此,请考虑将您的结果标准化...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 2016-07-06
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多