首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php -如果动态变量是相同的

php -如果动态变量是相同的
EN

Stack Overflow用户
提问于 2018-06-03 11:58:46
回答 3查看 50关注 0票数 1

我从我的数据库中获取了一堆记录,并循环遍历它们:

代码语言:javascript
运行
复制
$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds)";
$stmt = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($stmt as $row){ 

}       

现在,我的$row[]包含以下内容:

代码语言:javascript
运行
复制
$row["id"]; //Row id from database table
$row["temperature"]; //Values can be: 2-8, 15-25, No Temperature
$row["dgr"]; //Values can be: 0,1
$row["eq"]; //Values can be: 0,1
$row["ice"]; //Values can be: 0,1
$row["pil"]; //Values can be: 0,1

显然,上述条件可以形成许多不同的组合。我试图弄清楚如何将具有完全相同条件的记录添加到各自的数组中。

示例1:如果第10、20和30行有$row["dgr"] = "1"$row["temperature"] = "2-8",那么我希望将这些记录添加到数组中(因为它们都有相同的条件)。

我不知道如何检查,因为我不能只是$condition1 = $condition2,因为有数百种不同的结果。

示例2:

代码语言:javascript
运行
复制
if($row["dgr"] == 0 && $row["eq"] == 1){ 
  echo $row["id"]; //Show the ids that matches above condition 
}
if($row["dgr"] == 1 && $row["eq"] == 0){ 
  echo $row["id"]; //Show the ids that matches above condition 
}    
if($row["dgr"] == 0 && $row["eq"] == 0){ 
  echo $row["id"]; //Show the ids that matches above condition 
}

正如您在上面看到的,这些只是一些可能的组合。如果我必须“手动”检查所有5个条件和数百个不同的组合,它将花费我永远。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-03 12:20:16

这可能不是您想要的结果,但是您可以在查询中使用GROUP BY andgroup_concat`来实现这一点:

代码语言:javascript
运行
复制
SELECT `temperature`,`dgr`,`eq`,`ice`,`pil`, GROUP_CONCAT(`id`) as `ids` FROM `driving_list_shipments` WHERE id IN($allIds) GROUP BY `temperature`,`dgr`,`eq`,`ice`,`pil`

然后使用explode将ids设置为数组。

代码语言:javascript
运行
复制
explode(',', $row['ids'])
票数 1
EN

Stack Overflow用户

发布于 2018-06-03 12:13:29

您可以通过编写查询来获得它们,而不是在PHP循环中检查它们。

代码语言:javascript
运行
复制
$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds) AND dgr='1' AND temperature='2-8'";

实际上,我的意思是编写一个循环,为您获取正确的数据,而不是遍历所有数据:

代码语言:javascript
运行
复制
$rules = array (
  array ('dgr' => '1', 'temperature'=> '2-8'),
  array ('dgr' => '0', 'temperature'=> '2-8')
);   
for ($rulse as $rule) {
  $sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds) AND dgr='".$rule['dgr']."' AND temperature='".$rule['temperature']."'";
  $stmt = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-03 12:21:40

此查询将提供一个与特定温度和dgr匹配的id的结果。也许这件事的结果是可以质疑的。并被分配给一个特定的变量。

代码语言:javascript
运行
复制
SELECT temperature, dgr, GROUP_CONCAT(id) as ids FROM driving_list_shipments WHERE id IN($allIds) GROUP BY temperature, dgr
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50666145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档