如何从MySQL获取特定标签的文章

时间:2014-05-04 10:08:19

标签: mysql tags

我在MySQL中有一个包含大量文章的表 这是表结构:

CREATE TABLE articles (
  id char(32) default NULL,
  title char(192) default NULL,
  time int(10) unsigned default NULL,
  image char(255) default NULL,
  views mediumint(8) unsigned default '0',
  category char(128) default NULL
);

插入示例:

articles

我在这张表中有超过50000行。

一切都运作良好!

现在,我决定为我的文章创建TAGS 我制作了一个扫描所有文章的PHP脚本并创建了一个mysql表 以下是标签的表格结构:

id

插入示例:

title

我在这张表中有超过100000行 time是文章的内容 一篇文章可以有很多标签,一个标签可以分配给很多文章
当我想获得文章的所有标签时,我这样做:

image

这工作正常!


问题:
我正在尝试获取特定标签的文章列表
我尝试了以下查询,但执行时间超过30秒,php超时,服务器返回“500 Internal Server Error”。 以下是我尝试的查询:

views
category
INSERT INTO articles VALUES ('0123456789abcdef0123456789abcdef','Article Title',1204149600,'http://www.example.com/image.jpg',1234,'sports');


<小时/>


我跑这个:

articles

我得到了这个结果:

CREATE TABLE tags (
  id char(32) default NULL,
  tag char(192) default NULL
);

2 个答案:

答案 0 :(得分:2)

看起来你有索引问题。请在“标签”表格中为id创建索引,在“文章”表格中创建id。 要创建索引,请参阅以下链接: http://dev.mysql.com/doc/refman/5.0/en/create-index.html

答案 1 :(得分:1)

您的表上没有索引可以让MySQL查找您请求的数据,因此必须遍历每个组合。

  1. (样式)为tags表提供自己的ID,并将id重命名为article_id

    ALTER TABLE标签更改id article_id char(32),添加列id int(11)not null auto_increment primary key;

  2. 为表标记提供标记

    的索引

    ALTER TABLE标签ADD INDEX(tags,article_id);

  3. 为表articles提供id的索引。如果仍然可以,请给它一个独特的索引。

    ALTER TABLE文章ADD INDEX(id);

  4. 如果你的桌子会增长,我还会添加一个数字内部列:

    ALTER TABLE articles ADD COLUMN tech_id int(11) not null primary key auto_increment;
    

    如果系统变慢,您可以将表标记中的32-char-string更改引用到int tech_id