将两个查询混合在一起

时间:2018-01-31 21:14:23

标签: php arrays mysqli

我使用语句根据值更改查询,如果数组($dist)中存在值($disArray),则应该运行第一个查询(第一个$addq),如果不应该使用第二个。

$dist = 54; //or $dist = 2;
$disArray = array(54, 67, 102);

if(in_array($dist,$disArray)){
    $disId = getDisById($dist);
    $addq = "AND district.dis IN ($disId)";  
} else {
    $addq = "AND ads.district IN ($dist)";
}

$query = "SELECT ... //some other query, left join..// FROM items WHERE st = 1 $addq";

在这个例子中,如果值等于54,它执行第一个查询,如果2(或数组中不存在的其他数字)它执行第二个查询,现在我的问题是当$dist是一个数组时,应该怎么做在同一时间使用此语句进行两次查询?例如:

 $dist = 54, 2;

问题是,如果它是一个混合了第一个查询的数字和另一个第二个查询的数组的数组,它现在可以正常工作,它只运行一个查询,但我想在同一时间运行两个查询

因此它应该在54中找到district.dis,在2中找到ads.district

2 个答案:

答案 0 :(得分:3)

使用循环将值放在单独的变量中,然后在查询中将这两个条件与OR结合起来。

$dist = "54,2";
$distToArray = explode(",", $dist);

$district_dis = array();
$ads_district = array();
foreach ($distToArray as $d) {
    if (in_array($d, $disArray)) {
        $district_dis[] = getDisById($d);
    } else {
        $ads_district[] = $d;
    }
}
$conditions = array();
if (!empty($district_dis)) {
    $conditions[] = "district.dis IN (" . implode(',', $district_dis) . ")";
}
if (!empty($ads_district)) {
    $conditions[] = "ads.district IN (" . implode(',', $ads_district) . ")";
}
if (!empty($conditions)) {
    $addq = "AND (" . implode(' OR ', $conditions) . ")";
} else {
    $addq = "";
}

答案 1 :(得分:1)

从我们能够理解的问题来看,这是一个简单的条件逻辑问题。这就是rtfm所指的。我和jonasfh在一起,因为我对你在这里问的问题感到困惑。

<?php

$dist1 = 2;
$dist2 = 54;
$disArray = [54, 67, 102];

if (in_array([$dist1, $dist2], $disArray)) {
    //both    
} elseif (in_array($dist1, $disArray)) {
    //just $dist1
} elseif (in_array($dist2, $disArray)) {
    //just $dist2
} else {
    //none of the above
}

不要忽视条件顺序的重要性。