搜索存储为数组的mysql表列,然后根据结果连接另一个表

时间:2013-01-24 10:47:16

标签: mysql arrays search match

我正在博客网站上工作并坚持这一点:

的MySQL

  1. 'cat_list'表包含以下列:cat_idcat_name(14个条目),
  2. 'post'表有几列,其中category就是其中之一,我需要存储博客帖子被标记到的类别ID 。类别ID存储在array(19820,83729)中。 [因为博客帖子可以标记为多个类别]
  3. 我尝试按一个类别ID搜索“post”并加入“cat_list”来检索cat name。 请帮我这样做,还是我应该考虑其他任何其他数据库设计?

2 个答案:

答案 0 :(得分:0)

如果您的帖子可以使用多个类别进行标记,则表格模型错误。您需要博客帖子和类别之间的关联表。从category id表中删除post,然后创建一个包含post-categorypost-id列的表category-id。然后还在这两列上添加索引,以加快两个方向的搜索速度(按类别或邮寄)。

答案 1 :(得分:0)

试试这个:

SELECT c.cat_name FROM post as p 
LEFT JOIN cat_list AS c
ON c.cat_id = p.cat_id
WHERE p.post_id = "3"

示例数据:

CREATE TABLE cat_list(
  cat_id int auto_increment primary key,
  cat_name varchar(30)
  );

CREATE TABLE post (
  post_id int auto_increment primary key,
  cat_id int,
  post varchar(30)
  );

INSERT INTO cat_list (cat_name)
VALUES ("cat1"),("cat2"), ("cat3"),("cat4"),("cat5"),("cat6"),("cat7"),("cat8");

INSERT INTO post (cat_id, post)
VALUES (1,"jnkljlkajlkjaoiuweiuoi"), (1,"wuoieuoiuoidudjhkj"), (2,"eiuuqueiuriewuqyiuu"), (8,"vzbvbxvnbxmnbmn nmncmn");

SQL FIDDLE DEMO

更改帖子的ID以选择类别。