我有两张桌子
一个表是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
=================
现在我想从表2中选择数据列表,其中数据id将与表一第一项info_id数据匹配
我的查询是
SELECT i.* FROM `info` as i,`alldata` as a where i.id IN(a.info_id) and a.id=1
我的查询有效,但只从表二中选择一项。但是有多个匹配。
答案 0 :(得分:1)
您的非常数据库设计不佳。首先,将数字id存储为字符串是一个坏主意 - 数字应存储为数字。其次,SQL为存储列表提供了这种出色的数据结构。它被称为表,而不是字符串。
你应该有一个联结表,每id
一行info_id
和<{p}}。
也就是说,有时候我们会遇到不合规格的数据结构。 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无法利用索引之类的东西来提高此类查询的性能。