SQL条件下的内爆数组和字符串连接问题

Posted

技术标签:

【中文标题】SQL条件下的内爆数组和字符串连接问题【英文标题】:Trouble with imploded array and string concatenation in SQL condition 【发布时间】:2018-07-20 12:35:57 【问题描述】:

我没什么问题。我有内爆数组 ($imploded_arr) 。我想在 SQL 条件下使用它和下一个变量($godz)。它看起来像这样:

r3.meta_key LIKE '$imploded%$godz' . 

但它不起作用。 “逗号”可能有问题。这是我的 imploded_arr 的代码:

$imploded_arr = implode("','", $abc);

可以做这样的事情吗? 提前感谢

我以其他方式修复它,也许它会帮助某人: imploded = implode("|", $abc); r3.meta_key LIKE 'location%$godz' AND r3.meta_key REGEXP '$imploded'

【问题讨论】:

你能分享整个查询和你使用的数据库系统吗?有没有给出任何错误信息?可能,您希望使用比implode 更好的系统来引用任意输入 在全部大写提交之前再次查看问题时,您的标题对您来说是不是很奇怪 @Xatenev 是的,你说得对:)。我匆匆写下这篇文章。我会将标题编辑为不那么奇怪。最美好的祝愿 【参考方案1】:

一个简单的内爆可以这样完成:

$imploded_arr = implode(',', $abc);

这意味着您将数组值内爆并用昏迷“粘合”它们。如果你想要组合单引号/逗号/单引号,你应该使用你的。问题出在您的查询中。 Like 不能这样工作。百分比符号(通配符)在开头或结尾或两者兼而有之。

因此,如果您想在查询中使用 LIKE,因为不清楚您想要做什么,我会看到一些选项。

在您的 php 代码中,您可以创建一个新字符串来连接您的值,例如:

$NewValue=$imploded_arr.$godz 

然后你试试

r3.meta_key LIKE '%$NewValue%'

此外,在您的示例中,我看到您在内部使用了错误的变量名,例如也检查一下。您使用的是$imploded 而不是$imploded_arr

另一种选择是使用两个like,然后像这样处理结果:

 r3.meta_key LIKE '$imploded_arr%' and  r3.meta_key LIKE '%$godz'

这意味着您将检查以 $imploded_arr 字符串的值开头并以 $godz 字符串的值结尾的值。

这些是我可以看到的几个选项,但如果您提供更多信息,例如整个查询或代码的更大部分,我们可以更具体。

【讨论】:

嗨,抱歉耽搁了。我使用 ACF 中继器字段。所以 r3.meta_key 看起来像 'repeater_0_repeater_sub_field' 。 $imploded 是很好的变量,因为 $imploded = (str_replace("_lokacja", "", $imploded_arr)); 。 $imploded 给我 repeater 的名字。 “通配符”给我字段的数量。 $godz 给我repeater_sub_filed 的名字。所以它应该看起来像 r3.meta_key LIKE $imploded%$godz 这是我的查询:$przyjazd = $wpdb->get_results("SELECT r1.post_id as id1,r1.meta_key as min,r1.meta_value as odjazd ,r2.meta_value as przyjazd, r2.meta_key as max, r3.meta_key as godziny, r4.meta_key as godzprzyj FROM wp_postmeta r1 INNER JOIN wp_postmeta r2 on r2.post_id = r1.post_id INNER JOIN wp_postmeta r3 on r3.post_id = r1.post_id WHERE r1.meta_value = '$od' AND r2.meta_value = '$do' AND r1.meta_key IN ('$imploded_arr') AND r2.meta_key IN ('$imploded_arr1') AND r2.meta_key>r1.meta_key AND r3.meta_key LIKE '$imploded'%'$godz'", ARRAY_A); 我会试试这个选项:r3.meta_key LIKE '$imploded_arr%' and r3.meta_key LIKE '%godz' 我很快就会给出答案 :) 最良好的祝愿 :) 不幸的是,该选项不起作用。但这个选项最适合我的问题。这是我的 sql 错误:[You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near ''location_0','location_2' AND r3.meta_key LIKE '%_czas_odjazdu' AND r4.met' at line 7] 感谢您的宝贵时间 这是一个 sql 错误。提供您的查询,以便我们修复它。在您的第一个查询中,我没有看到 location_0 和 location_2 列,所以我假设您使用了另一个查询。

以上是关于SQL条件下的内爆数组和字符串连接问题的主要内容,如果未能解决你的问题,请参考以下文章

08_MySQL DQL(SQL99标准)_多表连接查询中的内连接

数据库的内连接外连接(左外连接右外连接全外连接)以及交叉连接(转)

Laravel 查询:Php 内爆数组字符串值 [重复]

内爆数组值?

oracle 如何将一个字段里的值拆分为多个值显示出来

将数组内爆为来自 mysql 查询的逗号分隔字符串