【问题标题】:MySQL select values from one table based on array of ids from another tableMySQL 根据另一个表中的 id 数组从一个表中选择值
【发布时间】:2016-08-15 18:54:11
【问题描述】:

我发现许多 PHP 示例使用 mapimplode 来构造它们的字符串...我正在使用 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


【解决方案1】:

我使用的是 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的。 JSON_SEARCH 不断返回 NULL 以获取 id 的路径,直到我将它们转换为字符串。反复试验...

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2021-03-29
    相关资源
    最近更新 更多