2016-08-15 126 views
0

我发现了许多使用mapimplode来构造它们的字符串的PHP示例......我使用Node和Javascript,我认为这可能是问题所在。我有一组ID,我保存它是这样的:MySQL从一个表中选择基于来自另一个表的ID表的数值

[1, 2, 3, 4].join(); 

这就是被存储,我试图运行一个查询:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (st.ids); 

因此,无论表中有一列的城市, table2有多个记录,table1只有一个。表2中的'ids'列是TEXT类型。问题是它只是返回id为1的行。如果我这样做:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (1,2); 

我会得到第1和第2行。是什么导致了这个问题?我试过[1, 2, 3, 4].join(', ');,这并没有帮助。有什么建议么?

+0

y javascript标记? – Iceman

+0

@Iceman因为我在使用Node.js并在保存之前使用Javascript修改了值 – denikov

+0

第一个建议不会存储想要加入/使用查询的连接字符串,因为这会让事情变得很痛苦!接下来,如果你打算这样做,请查看拆分字符串方法,以便将字符串拆分为表格,然后进行连接而不是进入。如果您不想拆分字符串,可以使用一些通配符搜索来伪装它,但是有巨大的潜在问题,然后你也可以去动态SQL路径。所有的方法建议不要存储连接的字符串,如果你将它们用于这样的目的。 – Matt

回答

0

我正在使用MySQL v5.7,所以我有权访问JSON函数......我应该首先使用它。因为我想它的工作原理解决的办法是:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND 
JSON_SEARCH(st.ids, 'one', sr.id) IS NOT NULL; 

喜欢新的JSON支持功能......本书虽然它与它的注意事项。例如,数组中的ID必须是字符串,ID不能是int's。 JSON_SEARCH继续返回NULL直到我转换为字符串的路径。试验和错误...

相关问题