我有一个 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)
我希望这很清楚,
请帮忙
最佳答案
部分问题在于您设置表格的方式。通常,您会有一个 events
、category
,然后是两者之间的连接表。您不应将数据存储在以逗号分隔的列表中以供查询。
如果你不能改变你的表结构,那么你可以使用 MySQL 函数 FIND_IN_SET()
:
SELECT *
FROM event e
INNER JOIN category c
on find_in_set(e.event_id, c.events)
如果你可以改变你的表,那么结构应该是:
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/