gpt4 book ai didi

php - 循环遍历数组以创建 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 08:09:00 26 4
gpt4 key购买 nike

我有一个如下所示的数组:

tod_house
tod_bung
tod_flat
tod_barnc
tod_farm
tod_small
tod_build
tod_devland
tod_farmland

如果其中任何一个有值,我想将其添加到 SQL 查询中,如果没有,我会忽略它。此外,如果一个值有一个值,则需要将其添加为 AND,并且任何后续的值都需要为 OR(但没有办法知道哪一个将被添加)成为第一个有值(value)的人!)

我使用了以下代码片段来检查第一个值并根据需要附加查询,但我不想复制粘贴 9 次;数组中的每一项都有一个。

$i = 0;
if (isset($_GET['tod_house'])){
if ($i == 0){
$i=1;
$query .= " AND ";
} else {
$query .= " OR ";
}
$query .= "tod_house = 1";
}

有没有办法循环遍历数组更改名称,这样我只需使用此代码一次(请注意,第一行上的 $_GET['tod_house'] 和最后一行上的 tod_house 不是同一件事! - 第一个是传递值的复选框的名称,第二个只是要添加到查询中的字符串)

<小时/>

解决方案

答案很大程度上基于已接受的答案,但我将准确展示有效的方法,以防其他人偶然发现这个问题......

我不希望答案如建议的那样:

tod_bung = 1 AND (tod_barnc = 1 OR tod_small = 1)

我想要的是这样的:

AND (tod_bung = 1 OR tod_barnc = 1 OR tod_small = 1)

因此可以将其附加到现有查询中。因此他的答案已更改为以下内容:

$qOR = array();
foreach ($list as $var) {
if (isset($_GET[$var])) {
$qOR[] = "$var = 1";
}
}
$qOR = implode(' OR ', $qOR);
$query .= " AND (" .$qOR . ")";

IE 不需要两个不同的数组 - 只需按照他的建议进行循环,如果设置了值,则将其添加到新的 qOR 数组,然后使用 OR 语句进行内爆,用括号括起来,并附加到原始查询。

唯一的小问题是,如果仅设置一项,则查询如下所示:

AND (tod_bung = 1)

有括号,但里面没有 OR 语句。严格来说,它们是不需要的,但我确信它不会改变它的工作原理,所以不用担心!!

最佳答案

$list = array('tod_house', 'tod_bung', 'tod_flat', 'tod_barnc', 'tod_farm', 'tod_small', 'tod_build', 'tod_devland', 'tod_farmland');
$qOR = array();
$qAND = array();

foreach ($list as $var) {
if (isset($_GET[$var])) {
if (!empty($qAND)) {
$qOR[] = "$var = 1";
} else {
$qAND[] = "$var = 1";
}
$values[] = $_GET[$var];
}
}



$qOR = implode(' OR ', $qOR);
if ($qOR != '') {
$qOR = '(' . $qOR . ')';
}

$qAND[] = $qOR;
$qAND = implode(' AND ', $qAND);


echo $qAND;

这将输出类似 tod_bung = 1 AND (tod_barnc = 1 OR tod_small = 1)

关于php - 循环遍历数组以创建 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com