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标准)_多表连接查询中的内连接