【发布时间】:2016-08-15 18:54:11
【问题描述】:
我发现许多 PHP 示例使用 map 和 implode 来构造它们的字符串...我正在使用 Node 和 Javascript,我认为这可能是问题所在。我有一个 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);
所以两个表都有一个列city,table2有多个记录,table1只有一个。 'ids' 列是表 2 中的 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(', '); 并没有帮助。有什么建议吗?
【问题讨论】:
-
是javascript标签吗?
-
@Iceman 因为我正在使用 Node.js 并在保存之前使用 Javascript 修改值
-
第一个建议不要存储您想要在查询中加入/使用的连接字符串,这样会让事情变得很痛苦!接下来,如果您仍然要这样做,请查找拆分字符串方法,以便将字符串拆分到一个表中,然后进行连接而不是 in。如果您不想拆分字符串,您可以使用一些通配符搜索来伪造它,但是有巨大的潜在问题,然后你也可以走动态 sql 路径。如果您将它们用于此类目的,所有方法都建议不要存储连接的字符串。
-
"SELECT sr.id, sr.name, sr.city FROM table1 AS sr JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (" + ids.join(",")+ ")" -
SELECT sr.id, sr.name, sr.city FROM table1 AS sr JOIN table2 AS st WHERE sr.city = st.city AND INSTR(st.ids, sr.id) != 0
标签: javascript mysql sql node.js