我有两个表
一个表是Alldata(这里info_id是使用php插入的文本字段数据)
=================
id | info_id
=================
1 | 2, 3, 5, 9
2 |
=================
second table is info
=================
id | name
=================
1 | one
2 | two
3 | three
4 | four
5 | five
6 | six
7 | seven
9 | eight
9 | nine
=================
现在我想从表二中选择数据列表,其中数据 ID 将与表一的第一项info_id数据匹配
我的查询是
SELECT i.* FROM `info` as i,`alldata` as a where i.id IN(a.info_id) and a.id=1
我的查询有效,但仅从表二中选择一个项目。但是有多个匹配的。
你的数据库设计非常糟糕。 首先,将数字 ID 存储为字符串是一个坏主意——数字应该存储为数字。 其次,SQL为存储列表提供了这种出色的数据结构。 它被称为表,而不是字符串。
你真的应该有一个接线表,每id
一行,info_id
.
也就是说,有时我们会遇到不合格的数据结构。 MySQL为此提供支持。 您可以使用:
SELECT i.*
FROM `info` i JOIN
`alldata` a
ON FIND_IN_SET(i.id, REPLACE(a.info_id, ', ', ',') ) > 0
WHERE a.id = 1;
您还应该学习使用正确、明确的join
语法。 如果使用此方法,则不允许抱怨性能,而不是修复数据库设计。 MySQL不能利用索引之类的东西来提高此类查询的性能。