php - если динамические переменные идентичны - PullRequest
0 голосов
/ 03 июня 2018

Я получаю кучу записей из своей базы данных и перебираю их:

$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds)";
$stmt = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($stmt as $row){ 

}       

Теперь мой $row[] содержит ниже:

$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:

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 условий и сотни различных комбинаций, это займет у меня вечность.

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Возможно, это не то, что вам нужно, но вы можете использовать GROUP BY and group_concat` в своем запросе для достижения этого:

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, чтобы превратить идентификаторы в массивнапример,

explode(',', $row['ids'])
0 голосов
/ 03 июня 2018

Этот запрос даст вам результат, идентификаторы которого соответствуют определенной температуре и dgr.Может быть, результат этого может быть запрошен.И быть назначенным на конкретную переменную.

SELECT temperature, dgr, GROUP_CONCAT(id) as ids FROM driving_list_shipments WHERE id IN($allIds) GROUP BY temperature, dgr
0 голосов
/ 03 июня 2018

Вы можете получить их, написав запрос, а не проверяя их в цикле PHP.

$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds) AND dgr='1' AND temperature='2-8'";

Или на самом деле я имею в виду Написать цикл, который собирает для вас правильные данные вместо цикла по всем данным:

$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);
}
...