MYSQL条件

标签 mysql

我有一个 mysql 表 category,其中一个字段 events 为 varchar,它的值是这样的:11,29,32.and此值指向 event 表 ID。 (所以我可以说:我在 category 表的 event 表中有几个 event ID)

所以我想像这样从 category 中选择 events :

 SELECT *
FROM                      
event e, category c                                                    
where e.event_id in (c.events)

但是当我像这样手动输入值时,这并没有给出正确的结果:

   SELECT *
FROM                      
event e, category c                                                    
where e.event_id in (11,29,32)

我希望这很清楚,

请帮忙

最佳答案

部分问题在于您设置表格的方式。通常,您会有一个 eventscategory,然后是两者之间的连接表。您不应将数据存储在以逗号分隔的列表中以供查询。

如果你不能改变你的表结构,那么你可以使用 MySQL 函数 FIND_IN_SET():

SELECT *
FROM event e
INNER JOIN category c                                                    
  on find_in_set(e.event_id, c.events)

参见 SQL Fiddle with Demo

如果你可以改变你的表,那么结构应该是:

create table events
(
  event_id int not null auto_increment primary key,
  event_name varchar(50) not null
);

create table category
(
  cat_id int not null auto_increment primary key,
  cat_name varchar(50) not null
);

create table events_category
(
   event_id int not null,
   category_id int not null,
   PRIMARY KEY(event_id, category_id),
   constraint fk_event 
    foreign key (event_id) references events (event_id),
   constraint fk_category 
    foreign key (category_id) references category (cat_id)
);

然后当您查询您将使用的数据时:

select *
from events e
left join events_category ec
  on e.event_id = ec.event_id
left join category c
  on ec.category_id = c.cat_id

关于MYSQL条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711675/

相关文章:

mysql - Redis 连接到 my-redis :6379 failed - getaddrinfo ENOTFOUND when running seeds

php - 在 WAMP 环境中设置 Concerto 自适应测试平台时出错

仅当 count() as col1 <> col2 时,mySQL 选择行

php - 获取所有 POST 数据并通过电子邮件发送

从已安装的根驱动器备份 Mysql

php - 按 id=1 排序的学说

mysql - 当没有匹配数据而不是返回0行时,有没有办法返回一个零列?

mysql - 为什么这个 MySQL 语句不起作用?

PHP - mysql_fetch_assoc() 错误

mysql - 将字符串的元素拆分为多个列